php - 基于 DOM 的 XSS 攻击和 InnerHTML

标签 php javascript dom xss

如何保护以下基于 DOM 的 XSS 攻击?

具体来说,是否有一个 protect() 函数可以使下面的内容安全? 如果不是,那么还有其他解决方案吗? 例如:给 div 一个 id,然后为元素分配一个 onclick 处理程序

<?php
function protect()
{
   // For non-DOM XSS attacks, hex-encoding all non-alphanumeric characters
   // with ASCII values less than 256 works (ie: \xHH)
   // But is it possible to augment this function to protect against
   // the below DOM based XSS attack?
}
?>

<body>
  <div id="mydiv"></div>
  <script type="text/javascript">
    var xss = "<?php echo protect($_GET["xss"]) ?>";
    $("#mydiv").html("<div onclick='myfunc(\""+xss+"\")'></div>")
  </script>
</body>

我希望得到的答案不是“避免使用 innerHTML”或“将 xss 变量正则表达式为 [a-zA-Z0-9]”...即:是否有更通用的解决方案?

谢谢

最佳答案

扩展 Vineet 的回复,这里有一组要研究的测试用例:

http://ha.ckers.org/xss.html

关于php - 基于 DOM 的 XSS 攻击和 InnerHTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6025418/

相关文章:

javascript - 无法在 JavaScript 中获取 HTML 复选框值

javascript - 如何在 Express、React、Webpack、SSR 应用程序中的客户端和服务器之间共享常量

Jquery如何向dom添加元素

php - 返回键包含此字符串的值

php - 在 2 个 if 语句中使用 $_POST

javascript - 用 * 搜索重新定义字符串的一部分

java - 如何使用 DOM 解析器获取标签值

php - 从 HTML 表单中搜索多个 MySQL 表并按字母顺序返回数据

javascript - 使用 Javascript 发出 HTTP POST 身份验证基本请求

Javascript 问题 - 使用 getElementById 间歇性地找不到元素