【问题标题】:XSS validation: Is it safe to check only if value contains <> and %3C %3EXSS 验证:仅检查值是否包含 <> 和 %3C %3E 是否安全
【发布时间】:2021-01-04 13:37:17
【问题描述】:

我一直在做服务器端 XSS 验证。这是我发现使用的: 禁止属性列表:javascript:,mocha:,eval(,alert(,vbscript:,livescript:,expression(,url(,&amp;{,&amp;#,/*,*/,onclick,oncontextmenu,ondblclick,onmousedown,onmouseenter,onmouseleave,onmousemove,onmouseover,onmouseout,onmouseup,onkeydown,onkeypress,onkeyup,onblur,onchange,onfocus,onfocusin,onfocusout,oninput,oninvalid,onreset,onsearch,onselect,onsubmit,ondrag,ondragend,ondragenter,ondragleave,ondragover,ondragstart,ondrop,oncopy,oncut,onpaste,ontouchcancel,ontouchend,ontouchmove,ontouchstart,onwheel

但它们似乎过于严格,因为如果我使用此列表,一些正确的值(例如“™”)被认为是非法的。

我在想,如果只检查不包含任何字符的值,如 ''、“%3E”、“%3C”,是否可以安全地防止 XSS 攻击?

【问题讨论】:

  • 不要尝试进行 xss 预防。它不会起作用,并且会不断存在漏洞。如果您不需要完整的 HTML,那么只需使用 innerText 之类的东西来避免整个事情,而不必使用任何过滤。如果您确实需要 HTML,则无论如何都应该进行客户端验证(由于浏览器呈现的不一致,很难制作可以在所有浏览器上停止 XSS 的服务器端应用程序),但如果不需要,您应该使用一个完善的图书馆,如HtmlSanitizer
  • 哪些字符是安全的,哪些字符不是高度,大量取决于用户输入的确切位置插入。
  • @Aplet123 我们已经对其进行了客户端验证。我要做的是防止有人使用 curl 向我们发送非法值。我无法控制这些值的呈现位置。如果它们包含任何脚本,我需要防止它们被持久化到数据库中。

标签: html xss


【解决方案1】:

您不需要阻止任何这些字符,经过长期教训,您只是潜在地切断了其他语言支持,您可以安全地使用这些字符。

假设我们有一个聊天框,因为这是在文本区域中最常使用的地方。用户可以传递以下&lt;html&gt;&lt;/html&gt;,如果处理不当,每个收到消息的用户都会在此聊天中打开一个新的 HTML 文档(可怕)。

幸运的是,这在客户端得到了处理,一些黑客使其成为“纯文本”。

在处理登录时,您可以正则表达式检查用户名,如果通过,则可以通过 SQL 搜索用户名,如果匹配通过加密刚刚给出的密码并匹配它来检查密码是否也匹配,不匹配就退出。

知道正确的编码/解码(转义做法和诸如此类),我从不需要阻止字符或处理任何特殊的东西。也许这会对您的搜索有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 2019-01-04
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多