html - XSS 攻击,多次 html 清理

标签 html database security xss

我正在从事一个 Web 服务项目,我在其中显示从数据库中获得的一些数据,而这些数据又由用户的输入组成。当然,我想防止我的应用程序容易受到 XSS 攻击,所以显然我对 html 特殊字符的输入进行了清理。但我有以下问题 - 从服务器返回的数据格式为 <(在本例中为 '<' 符号),并且在前端发生第二次清理过程,使其成为 <,这是完全无法理解的网页浏览器。有没有一种简单的方法来克服它,或者我应该只在一个地方清理输入(我认为服务器是最好的选择)。

谢谢大家的回答。

最佳答案

您无法可靠地净化用户输入。这是一场失败的战斗。一旦您认为您已经过滤掉了所有“坏”字符,就会有人传入转义序列或其他意想不到的东西

如果您使用的是数据库服务器,请确保所有输入都由预编译的存储过程处理,并确保登录网络应用程序的用户只有 EXECUTE 权限。这可以防止 SQL 注入(inject)和其他恶作剧。

如果您担心实际字符,请确保您有一个“通过 OK 字符”过滤器而不是“删除不良字符”过滤器。 “好角色”的数量是有限的,而攻击向量的数量是无限的。

至于你关于“<”字符的问题,如果预期的输出是供用户显示,你可以通过 HttpServerUtility.HtmlEncode 运行整个字符串,或者它在你使用的任何语言中都是等效的。这会将字符串转换为可在浏览器中正确显示但不被解释的代码。

看起来您在转义它时遇到了问题,但您在决定是否需要转义它时遇到了问题。选择一个标准并坚持下去,然后根据需要进行转换。如果它通常是未转义的,就这样存储它,当你想显示它时转义它。

关于html - XSS 攻击,多次 html 清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51350971/

相关文章:

javascript - Bootstrap 验证器表单问题

mysql - 将 MySQL 的 LOAD DATA INFILE 与 node.js 一起使用?

security - Delphi 中的缓冲区溢出漏洞

javascript - XHR2 认证请求 - 安全/可伪造?

jquery - 滚动到指定部分时如何在 href 上添加事件类?

javascript - 如何解析动态变化的HTML?

database - 数据库供应链管理

python - 如何在传输过程中保护 REST API 负载?

javascript - meteor : save html as string and later convert it to a DOM node

mysql - 数据库设计: how to effectively manage about 4000 databases with mysql