如下php代码
为什么会有两种不同情况?chrome 55版本
http://localhost/test/?name=//失败
http://localhost/test/?name=
//成功
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
你好,这个问题主要是chrome自带的xss过滤器导致的
目前很多浏览器都会自身对用户的输入进行判断,检测是否存在攻击字符,比如你上述提到的<script>标签,这段脚本很明显就是一段xss攻击向量,因此浏览器会对这段输入进行处理,不同的浏览器处理方式也不一样。
但为了不影响用户体验,过滤器一般也只会对一些基础的xss攻击语句进行处理,所以题主下面的语句很可能过滤器并未检测和处理,因此造成了上述情况。
不好意思,之前没仔细看代码,题主是通过innerHTML将文本插入,这样的方式确实不会执行,我上述的回答仅适用于直接输出时造成的执行差异。
$name = htmlspecialchars ($_GET["name"],ENT_QUOTES );print.innerText= text.value;print.innerHTML 这个 innerHTML 是解析html标签的 innerText 是不解析 html标签的.这个是典型的demoxss
问题在于innerHTML插入script不执行,参考:
id.innerHTML中插入<script src"sds.js"></script>
让innerHTML的js脚本运行起来 总结
可以使用document.write()让js执行