1

我试图抓住编程过程中应该优先考虑的安全问题。让我们来看看 MySQL 和 PHP 的关系。

防止恶意软件进行跨站脚本、SQL 注入等;从我读过的一堆文章中,似乎清理/清理源(用户输入数据等)足以应对大多数攻击。然而相比之下,在静态源扫描器应用程序社区中,Sinks 似乎比 Sources 更专注。(正在写入的数据池/数据库/文件)。这是为什么?

我想在完美的世界中,如果不是大多数攻击,很多攻击都可以通过源处理来处理,对吧?使用正确的清理方法,可以阻止很多攻击......

甚至如何修复接收器而不是源中的安全问题?

4

1 回答 1

2

使用正确的清理方法,可以阻止很多攻击......

如果您拥有所有可能接收器的完整列表,则只能从源头停止攻击,因此您可以删除任何这些格式中可能“特殊”的字符。这是不切实际的,因为几乎所有标点符号在某些情况下都是“特殊的”,而且通常人们确实需要能够在大多数应用程序中使用标点符号。即便如此,过滤标点符号也不能保护您免受未引用的 SQL 注入(OR 1攻击)。

输入验证充其量只是一种纵深防御措施,其本身不足以抵御注入攻击。(当然,除了安全性之外,它还有其他好处。)

甚至如何修复 Sinks 而不是 Sources 中的安全问题?

  1. 为上下文转义的正确输出形式;

  2. 没有标准形式的转义、带外字符过滤或临时转义(例如,没有标准的方式包含;在 cookie 值中,但某些应用程序决定将 cookie 视为 URL 编码);

  3. 最重要的是,尤其是在上下文嵌套的情况下,因为这很难做到正确——使用抽象出转义需求的接口,例如参数化 SQL 查询和自动转义的模板语言。

我希望“消毒”这个词永远消失。咆哮

于 2013-09-17T20:42:11.483 回答