首页 > 解决方案 > XSS 验证:仅检查值是否包含 <> 和 %3C %3E 是否安全

问题描述

我一直在做服务器端 XSS 验证。这是我发现使用的:禁止属性列表:javascript:,mocha:,eval(,alert(,vbscript:,livescript:,expression(,url(,&{,&#,/*,*/,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 攻击?

标签: htmlxss

解决方案


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

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

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

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

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


推荐阅读