- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要实现 XSS 防御,但遇到了麻烦。我读了这个备忘单 https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html有很多有值(value)的信息,但对我来说实现起来相当困难。我明白,你需要逃避不受信任的数据,我已经在我的应用程序中实现了它,但我还需要实现某种黑名单/白名单,对吧?数据中允许什么,不允许什么。我试图在我的服务器端(java)使用这段代码,但我需要在前端使用类似的东西。我正在使用核心 javascript 和 jquery
我找到了这个用于转义字符的库。 https://github.com/YahooArchive/xss-filters/wiki可以用吗?
// Avoid anything between script tags
Pattern scriptPattern = Pattern.compile("<script>(.*?)</script>", Pattern.CASE_INSENSITIVE);
value = scriptPattern.matcher(value).replaceAll("");
// Avoid anything in a src='...' type of expression
scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
value = scriptPattern.matcher(value).replaceAll("");
scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
value = scriptPattern.matcher(value).replaceAll("");
// Remove any lonesome </script> tag
scriptPattern = Pattern.compile("</script>", Pattern.CASE_INSENSITIVE);
value = scriptPattern.matcher(value).replaceAll("");
// Remove any lonesome <script ...> tag
scriptPattern = Pattern.compile("<script(.*?)>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
value = scriptPattern.matcher(value).replaceAll("");
// Avoid eval(...) expressions
scriptPattern = Pattern.compile("eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
value = scriptPattern.matcher(value).replaceAll("");
// Avoid expression(...) expressions
scriptPattern = Pattern.compile("expression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
value = scriptPattern.matcher(value).replaceAll("");
// Avoid javascript:... expressions
scriptPattern = Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE);
value = scriptPattern.matcher(value).replaceAll("");
// Avoid vbscript:... expressions
scriptPattern = Pattern.compile("vbscript:", Pattern.CASE_INSENSITIVE);
value = scriptPattern.matcher(value).replaceAll("");
// Avoid onload= expressions
scriptPattern = Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
value = scriptPattern.matcher(value).replaceAll("");
最佳答案
黑名单并没有真正起作用。它们只能涵盖与程序员已经想到的模式相匹配的攻击,但始终会发现新的变体和技术。参见 XSS Filter Evasion Cheat Sheet例如。
像 Chrome 这样的浏览器已经付出了巨大的努力来尝试使用他们的过滤器来检测 XSS,但即便如此,他们现在仍计划将其删除,因为它充满了漏洞并阻止了合法输入(Google to remove Chrome's built-in XSS protection)
您发现的过滤器特别糟糕。有明显遗漏,比如找onload
但不是 onmouseover
.它不处理嵌套值,所以 <vbscript:script>alert(1)</scriptvbscript:>
变成 <script>alert(1)</script>
.还有很多类型的 XSS 攻击,如果同时使用多个参数,这些过滤器无法检测。
相反,请关注备忘单上的 OWASP 规则。在这里,有一些白名单的用途,但它们更容易实现,因为它们正在寻找特定的已知值。因此,规则 #7(避免 JavaScript URL)可以通过在您输出的任何 URL 的开头查找“http:”或“https:”来实现。规则 #6(清理 HTML 标记)可以使用另一个库来实现,该库被配置为仅允许特定的标签和值。
Yahoo 库看起来足够合理,可以转义,但看起来不再维护了。他们出于性能原因转义尽可能少的字符的方法需要比其他一些库更多的方法,您需要更加小心地为每个上下文使用完全正确的方法(例如 inSingleQuotedAttr
与 inDoubleQuotedAttr
)。相反,我会使用至少转义 &
的库, <
, >
, "
, '
用于他们的 HTML 转义,然后可以将许多这些方法合并在一起。
对于 JavaScript,大多数现代模板语言默认会转义值,或者您可以坚持使用基于文本的 DOM 方法,例如 $().attr()
和 $().text()
而不是 $().html()
,那么就不需要外部转义库了。
关于javascript - XSS黑名单/白名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57690970/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
你咋不上天 傲娇的野狗 最霸气的方式 野权少女. 黑名单° 一个酷girl. 怪味野痞 小子,你的高傲呢。 未来、来不了 看尽事态的炎凉 灵魂傀儡 愿你安好 倾他
我们有一组用户 CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(254) NOT
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我想知道是否有一种方法可以在 Android(考虑 2.1 及更高版本)上过滤(阻止)来电。我找到了使用反射的解决方案,但它似乎不是非常干净可靠的解决方案。是否有任何标准或谷歌推荐的方法来做到这一点?
作为在非常大的代码库中永久修复 XSS 漏洞的同时减轻主要风险的临时快速修复,我正在寻找一个预先存在的 XSS 预防黑名单,它可以合理地防止 XSS . 最好是一组正则表达式。我知道有很多用于测试和冒
有没有办法在我的应用程序中的每个组件被挂载之前定义一个函数来 Hook ? 这个想法是,如果一个组件被列入黑名单,它根本就不会挂载。 为了向后兼容,解决方案必须不修改组件,并且应该在生产中运行(因此重
有没有办法,例如一个 Maven 插件,它可以获取不需要的/黑名单依赖项(直接和传递)的列表,如果它检测到列出的依赖项之一,则构建失败? 在我的项目中,我们非常希望摆脱 Apache Commons
这是我的persistConfig 和store 代码,我想为tracking 添加blacklist,但没有对于所有跟踪状态,但仅针对 tracking.checkingOut、tracking.c
我正在尝试启动Kafka使用者,但显示以下错误: $ bin/kafka-console-consumer.sh --zookeeper localhost:2181 —topic Hello-Kaf
此处解释的 IP 白名单/黑名单示例 https://kubernetes.io/docs/tutorials/services/source-ip/使用 source.ip 属性。但是,在 kube
一个经典的例子是: schema = Joi.object().keys({ my_string: Joi.string().valid("myString").required() });
我想检查用户在我拥有的富 HTML 编辑器中使用的 HTML 标签。我不确定如何在 C# 中执行此操作。 我应该使用正则表达式吗?我应该将哪些 HTML 标记列入黑名单/白名单? 最佳答案 一个简单的
我正在编写一个 Django 应用程序,用于跟踪允许哪些电子邮件地址将内容发布到用户帐户。用户可以根据需要将地址列入白名单和黑名单。 任何未指定的地址都可以按消息处理或仅默认为白名单或黑名单(同样由用
情况: 我有一个用户 模型,它需要通过列入黑名单的电子邮件地址列表进行验证。列入黑名单的电子邮件地址位于名为黑名单 的额外模型中 模型/用户.rb: class User "E-Mail")
我的脚本会打开两个文件:whitelist.txt 和 blacklist.txt,其中包含 IP 地址。 我想将 blacklist.txt 中不存在于 whitelist.txt 中的所有 ip
我正在寻找一种在 Apache 2.4.x 中将 IP 地址列入黑名单的简单方法。我的网站将尝试非法操作的 IP 地址记录到文本文件中。我想在 Apache 中使用这个文本文件来拒绝对这个 ip 列表
在我的基础项目中,我使用 JasperReports 的依赖项,它的 pom.xml 中具有不存在的存储库声明。当我运行每个 Maven 命令时,都会有依赖项在这个 Jasper 存储库中寻找 com
我一直在尝试在 PHP 中实现一种 IP 黑名单,我将失败的登录尝试存储到具有以下架构的 MySQL 表中: CREATE TABLE blacklist( `ip_address` VARC
是的,我知道有 Voter tutorial in cookbook .但我正在寻找稍微不同的东西。我需要两层不同的黑名单: 拒绝某些 IP 访问整个网站 拒绝某些IP登录 我写了 Voter 检查用
我是一名优秀的程序员,十分优秀!