xss - 什么时候最好清理用户输入?

标签 xss sql-injection user-input sanitization

用户等于不可信。永远不要相信不可信的用户输入。我明白了。但是,我想知道清理输入的最佳时间是什么时候。例如,您是否盲目存储用户输入,然后在访问/使用时对其进行清理,或者您是否立即清理输入,然后存储此“清理”版本?也许除了这些之外还有一些我没有想到的方法。我更倾向于第一种方法,因为来自用户输入的任何数据仍然必须谨慎处理,其中“清理后的”数据可能仍然在不知不觉中或意外地存在危险。不管怎样,人们认为哪种方法最好,出于什么原因?

最佳答案

不幸的是,几乎没有一个参与者能够清楚地理解他们在说什么。字面上地。仅Kibbee设法把事情搞清楚。

这个主题是关于 sanitizer 的。但事实是,像每个人都热切谈论的广泛的“通用 sanitizer ”这样的事情根本不存在。

无数种不同的媒体,每种媒体都需要它自己的、独特的数据格式。此外 - 即使单一的特定媒体也需要对其各个部分进行不同的格式强>。比如说,HTML 格式对于 HTML 页面中嵌入的 javascript 来说是没有用的。或者,字符串格式对于 SQL 查询中的数字是没有用的。

事实上,大多数赞成答案中所建议的“尽早清理”是不可能的。因为人们无法判断数据将在哪一种介质或介质部分中使用。比如说,我们准备防御“sql注入(inject)”,逃避一切移动的东西。但是哎呀! - 一些必填字段未填写,我们必须将数据填回表单而不是数据库......并添加所有斜杠。

另一方面,我们努力转义了所有“用户输入”...但是在 sql 查询中我们没有引号围绕它,因为它是一个数字或标识符。没有任何“ sanitizer ”可以帮助我们。

第三方面 - 好吧,我们尽了最大努力清理可怕的、不值得信任和鄙视的“用户输入”......但在某些内部流程中,我们在没有任何格式的情况下使用了这些数据(因为我们已经尽力了! ) - 哎呀!已经获得了二阶注入(inject)的所有荣耀。

所以,从现实生活使用的角度来看,唯一正确的方法是

  • 格式化,而不是任何“清理”
  • 使用前
  • 根据一定的媒介规则
  • 甚至遵循该媒体不同部分所需的子规则。

关于xss - 什么时候最好清理用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34896/

相关文章:

javascript - httpOnly如何防止恶意包窃取其中的内容?

security - 担心 XSS、CSRF、sql 注入(inject)、cookie 窃取是否足以覆盖网络安全?

python - PyMySQL 如何防止用户遭受 sql 注入(inject)攻击?

testing - 如何在微服务上进行渗透测试/安全测试?

php - 从用户处获取数据并在 python 脚本中使用该数据

Java范围输入困惑

c# - 如何根据用户输入创建对象 - C#

Codeigniter global_xss_filtering

ruby-on-rails - Rails Rpec InvalidCrossOriginRequest

python - 在 Python 中允许 Markdown 的最佳实践,同时防止 XSS 攻击?