什么是最好/最安全的方法来确保如果用户将任何 html 或 javascript(甚至 SQL)输入到一个表单中,它都会被清除并且只显示纯文本(或将以纯文本显示他们的 html)或给出用户出错?显然,我试图阻止 XSS 和任何类型的注入,并且我不希望用户尝试使用他们自己的 HTML 来干扰我的页面的显示。理想情况下,我宁愿不将 HTML 写入数据库。
编辑:我不确定将谁标记为答案,因为你们都从不同角度解决了这个问题
什么是最好/最安全的方法来确保如果用户将任何 html 或 javascript(甚至 SQL)输入到一个表单中,它都会被清除并且只显示纯文本(或将以纯文本显示他们的 html)或给出用户出错?显然,我试图阻止 XSS 和任何类型的注入,并且我不希望用户尝试使用他们自己的 HTML 来干扰我的页面的显示。理想情况下,我宁愿不将 HTML 写入数据库。
编辑:我不确定将谁标记为答案,因为你们都从不同角度解决了这个问题
为什么要在存储到数据库之前进行过滤?输出时过滤。例如,在 Web 应用程序中,您可以进行 HTML 编码。Razor@
功能已经这样做了:
@Model.SomePropertyThatCouldContainHTML
现在你安全了。在您的数据库中,您存储了可以在其他应用程序中重用的实际字符串。例如,在桌面应用程序中,您无需担心 XSS,因此去除这些标签是没有意义的。
但是,如果您需要显示未编码的用户输入,您可以使用AntiXSS库从中删除所有可能导致 XSS 的危险 javascript 代码。
就 SQL 而言,始终使用参数化查询,这样您就不必担心任何 SQL 注入。
默认情况下,请求验证在您的网站中打开。基本上,这会检查到达服务器的每个请求,如果它检测到有潜在危险的请求,它将抛出异常。理论上它很棒,但现实是,至少在我的经验中,你几乎总是在使用某种 RTE(或通常的用户输入)的页面上关闭它,因为 HTML 的存在会导致验证失败。
有很多方法可以防止 XSS,但这里有一些基础知识:
以下是一些资源:
最后,当有疑问时谷歌
调查