新增UBB:
[html]任意HTML代码[/html]
[html=内容高度]任意HTML代码[/html]
[html=内容宽度,内容高度]任意HTML代码[/html]
<iframe>
放入[html]
标签中。你可以直接使用<iframe>
标签,不必把它放进[html][/html]
。
[html][/html]
UBB是用<iframe>
标签实现的,如果你把<iframe>
标签放进[html][/html]
里,就会套上两层<iframe>
,可能达不到你想要的显示效果,而且也会影响页面性能。
虎绿林对iframe
标签的支持详见:https://hu60.cn/q.php/bbs.topic.101478.html
正是对iframe
标签安全性的深入研究,才为我们带来了[html]
UBB。
[html]
<div class="topic-anchor">
<a href="user.info.1.html">
<img src="https://file.hu60.cn/avatar/1.jpg?r=1628117593" class="avatar" />
</a>
<a href="user.info.1.html">老虎会游泳</a>
</div>
[/html]
点击“HTML代码”链接可以看到用户使用的代码,修改编辑框中的代码后再点击“HTML代码”,就可以看到修改后的效果。
因为html是作为srcdoc
属性(MDN)嵌入在沙箱化iframe中的,所以必须为内容指定高度,默认高度为300px,如果不足以完整显示演示内容,就会出现滚动条;如果内容太少,就会有大片空白。
如果要设置高度,可以这样写(200是设置的高度):
[html=200]
<div class="topic-anchor">
<a href="user.info.1.html">
<img src="https://file.hu60.cn/avatar/1.jpg?r=1628117593" class="avatar" />
</a>
<a href="user.info.1.html">老虎会游泳</a>
</div>
[/html]
如果想同时指定宽度和高度,就是这样(高度和宽度用逗号分隔):
[html=640,300]
<div class="topic-anchor">
<a href="user.info.1.html">
<img src="https://file.hu60.cn/avatar/1.jpg?r=1628117593" class="avatar" />
</a>
<a href="user.info.1.html">老虎会游泳</a>
</div>
[/html]
嵌入的HTML与虎绿林不同源,所以以下XHR请求会失败,这保证了嵌入HTML无法用于CSRF攻击。
[html=60]
<div id="result"></div>
<script src="/tpl/jhin/js/jquery-3.1.1.min.js"></script>
<script>
var f = async function () {
try {
console.log("hello");
var r = await $.get("https://hu60.cn/q.php/index.index.json");
console.log('成功', r);
document.getElementById('result').innerText = '成功: '+JSON.stringify(r);
} catch (ex) {
console.log('失败', ex);
document.getElementById('result').innerText = '失败: '+JSON.stringify(ex);
}
};
f();
</script>
[/html]
它的原理是:如果iframe
指定了sandbox
属性,并且里面不包含allow-same-origin
,那么iframe
生成的页面就被认为和父页面不同源。
但是以下代码会成功,因为_origin=*
参数让虎绿林发送了一个Access-Control-Allow-Origin: *
头信息。不过这样依然可以保证安全,因为此时虎绿林不会接受Cookie,请求必须自行传递sid才能处于登陆状态(详见虎绿林API手册)。
[html=60]
<div id="result"></div>
<script src="/tpl/jhin/js/jquery-3.1.1.min.js"></script>
<script>
var f = async function () {
try {
console.log("hello");
var r = await $.get("https://hu60.cn/q.php/index.index.json?_origin=*");
console.log('成功', r);
document.getElementById('result').innerText = '成功: '+JSON.stringify(r);
} catch (ex) {
console.log('失败', ex);
document.getElementById('result').innerText = '失败: '+JSON.stringify(ex);
}
};
f();
</script>
[/html]
markdown块级代码标记具有最高优先级,[code]
标记具有第二优先级,[html]
标记具有第三优先级。
如果高优先级标记出现在低优先级标记内部,UBB解析会出问题,达不到预期显示目的。比如以下UBB标记[html]
不会生效:
[html]
<pre>
一段markdown代码高亮:
```
test
```
一段UBB代码高亮:
[code]test[/code]
代码高亮结束
</pre>
[/html]
效果:
[html]
<pre>
一段markdown代码高亮:
test
一段UBB代码高亮:
test
代码高亮结束
</pre>
[/html]
为了正常显示,必须对反引号和中括号进行html实体编码:
[html]
<pre>
一段markdown代码高亮:
```
test
```
一段UBB代码高亮:
[code]test[/code]
代码高亮结束
</pre>
[/html]
嵌入的HTML无法进行弹窗:
不会生效。
HTML代码
@小兽,对,外站资源的同源策略检查会失败,比如这就不行:
HTML代码
@小兽,嗯。不过上面的代码帮你解决了自适应高宽问题,你可以用。
加在
new HlsJsPlayer({
里面就可以。下面这个资源手机上能放电脑上不能放,因为手机原生支持m3u8,不受同源策略影响。而电脑不支持,用XHR请求m3u8的时候就会被同源策略阻止。
HTML代码
关于m3u8同源策略的问题,详见 https://hu60.cn/q.php/bbs.topic.98922.html
网页链接
https://cway.top
HTML代码
HTML代码
@-,17楼是已知问题,GET请求不被保护,所以有很多种方法来实现这种操作。改成通过POST传递参数才能避免问题。
跨站表单提交防护只能拦截POST表单提交。
更正:17楼和18楼是同样的安全漏洞,都是跨站脚本防护对html标签中的内容失效导致的。
@-,18楼是一个安全漏洞,以下代码可以成功,表明跨站请求防护对HTML标签无效。我会进行修复。
HTML代码
@-,问题已解决: