我正在努力掌握在编程期间应该优先考虑安全性的问题。让我们来看看MySQL和PHP的关系。
防止恶意软件进行跨站点脚本,SQL注入等;从我读过的一堆文章来看,似乎清理/清理源(用户输入数据等)足以解决大多数攻击。然而相比之下,在静态源扫描器应用程序社区中,Sink似乎更专注而不是Sources。 (正在写入的数据池/数据库/文件)。那是为什么?
我想在完美的世界中,如果不是大多数的攻击可以通过源处理来处理吗?使用正确的清理方法,可以阻止很多攻击......
如何修复Sinks中的安全问题而不是源代码?
答案 0 :(得分:2)
使用正确的清理方法,可以阻止很多攻击......
如果您拥有所有可能接收器的完整列表,则只能在源处停止攻击,因此您可以删除任何这些格式中可能“特殊”的字符。这是不切实际的,因为在某些情况下几乎所有标点符号都是“特殊的”,并且通常人们确实需要能够在大多数应用程序中使用标点符号。即便如此,过滤标点符号也不能保护您免受不带引号的SQL注入(OR 1
攻击)。
输入验证充其量只是一种纵深防御措施,并且本身不足以抵御注入攻击。 (当然,除了安全之外,它还有其他好处。)
如何解决Sinks中的安全问题而不是来源?
为上下文转义的正确输出形式;
其中没有标准形式的转义,过滤带外字符或临时转义(例如,没有标准方法将;
包含在cookie值中,但某些应用决定将cookie视为URL编码);
最重要的是,尤其是在上下文嵌套的情况下,因为很难获得正确使用的接口,这些接口抽象出了转义的需要,例如参数化的SQL查询和自动转义的模板语言。
我希望“消毒”这个词永远消失。 rant