Php 在安全方面,汇比源更重要吗?

Php 在安全方面,汇比源更重要吗?,php,mysql,security,Php,Mysql,Security,我正试图在编程过程中把握安全性的优先顺序。让我们看看MySQL和PHP的关系 防止恶意用户进行跨站点脚本编写、SQL注入等;从我读过的大量文章中,似乎对源代码(用户输入数据等)进行消毒/清理就足以应对大多数攻击。然而,相比之下,在静态源扫描程序应用程序社区中,接收器似乎比源更受关注。(正在写入的数据池/数据库/文件)。为什么呢 我猜在完美世界中,很多攻击(如果不是大多数的话)都可以通过源代码处理来处理,对吗?有了正确的消毒方法,很多攻击都可以被阻止 如何解决汇而非源中的安全问题 有了正确的消毒方

我正试图在编程过程中把握安全性的优先顺序。让我们看看MySQL和PHP的关系

防止恶意用户进行跨站点脚本编写、SQL注入等;从我读过的大量文章中,似乎对源代码(用户输入数据等)进行消毒/清理就足以应对大多数攻击。然而,相比之下,在静态源扫描程序应用程序社区中,接收器似乎比源更受关注。(正在写入的数据池/数据库/文件)。为什么呢

我猜在完美世界中,很多攻击(如果不是大多数的话)都可以通过源代码处理来处理,对吗?有了正确的消毒方法,很多攻击都可以被阻止

如何解决汇而非源中的安全问题

有了正确的消毒方法,很多攻击都可以被阻止

只有在拥有所有可能接收的完整列表的情况下,才能在源位置停止攻击,这样才能删除这些格式中可能“特殊”的字符。这是不切实际的,因为几乎所有的标点符号在某些上下文中都是“特殊的”,而且通常人们需要能够在大多数应用程序中使用标点符号。即使这样,过滤标点符号也不能保护您免受无引号的SQL注入(
或1
攻击)

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

如何解决汇而非源中的安全问题

  • 上下文输出转义的正确形式

  • 没有标准形式的转义、带外字符过滤或特殊转义(例如,没有标准方法在cookie值中包含
    ,但一些应用决定将cookie视为URL编码)

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


  • 我希望“消毒”这个词永远消失

    防止旨在破坏数据库服务的SQL注入攻击与允许他人访问您的数据的攻击之间存在差异。SQL注入很容易被阻止。另一个——不是。这就是世界末日的场景——如果有人访问了我的服务器怎么办?如何防止此人(轻松)获取我的数据。这就是各种安全方法发挥巨大作用的地方。你的问题有点模棱两可,我必须承认,如果可以的话,请扩展它。哇,太棒了。。。谢谢你的回复。因此,需要有基于源和汇的安全措施,使事情“安全”;不只是停留在源头或试图至少。。。(我明白了吗?)。。。如果您有一个丢失的源(有数据进来,但您不知道确切的来源),并且它在安全应用程序中报告。。您将如何尝试解决该问题?丢失的水槽呢?(…一个比另一个重要吗?)。非常感谢。什么是应用程序?它在抱怨什么?安全扫描必然会产生许多误报;如果你了解什么是来源,并且知道它是安全的,那么你可以很高兴地忽略这个发现。我没听说过“丢失”这个词——这是指导致扫描仪无法扫描的其他组件的源/汇吗?同样,您需要了解这些组件在做什么,以决定它们是否安全;如果应用程序中有重要部分未被覆盖,则可能是时候查看另一个可以覆盖的扫描器了。通常,接收器端处理(escaping等)对于解决“注入”类错误是必要且充分的;源端处理(输入验证)并非如此,但它可以减轻汇端处理失败的影响,而且您无论如何都希望它用于强制执行业务规则。接收器/源污染跟踪捕获的漏洞种类比仅仅注入要广一些:它还检测设计中的错误,即你故意做一些愚蠢的事情,比如直接将用户命令传递给shell,对此,任何转义或过滤都帮不了你!(当然,还有许多其他种类的特定于应用程序的逻辑错误,污染跟踪无法检测到……)丢失或丢失接收器抱歉似乎就是这个术语。我相信它适用于很多扫描应用程序;惠普、IBM和开源RIP。Missing Sink是一个应用程序知道它存在但不知道具体是什么方法的方法。。。(据我所知,如果水槽缺失,你可能不知道该采取什么样的行动,但你知道来源)