html - 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 攻击?
解决方案
您不需要阻止任何这些字符,经过长期学习,您只是潜在地切断了其他语言支持,您可以安全地使用这些字符。
想象一下我们有一个聊天框,因为这是在文本区域中最常使用的地方。用户可以传递以下内容<html></html>
,如果处理不当,每个收到消息的用户都会在此聊天中打开一个新的 HTML 文档(可怕)。
幸运的是,这在客户端得到了处理,一些黑客使其成为“纯文本”。
处理登录时,您可以正则表达式检查用户名,如果通过,则可以通过 SQL 搜索用户名,如果匹配则通过加密刚刚给出的密码并匹配它来检查密码是否也匹配,没有匹配项。
我从来不需要阻止字符或处理任何特殊的知道正确的编码/解码(转义做法和诸如此类)。也许这将有助于您的搜索。
推荐阅读
- c# - 如何以编程方式创建和分配静态 TwiML Bin 作为 SMS 响应?
- windows - EXE的重定向输出由任务调度程序启动,具有正确关闭的能力,当“运行是否登录用户”选项。
- c# - 转换 Android.App.Application.Context 时出现 InvalidCastException
- python - 使用数据库行填充 html 页面
- java - 如何使用 Gradle 从可执行 Jar 文件中创建可执行文件?
- java - 斯坦福核心 NLP ner 4.0.0 错误:无法找到或加载主类 stanford-ner.jar;lib.*
- tensorflow - 将 TensorFlow 对象检测教程扩展到多个类时出错
- github - 我无法在 vscode 中启动终端
- spring - 如何应用所有 In 子句并使用 Spring JPA 中的条件获取列表
- azure - 从公共 Web 上的 Azure Webjob 删除或保护 Webhook