我们想检查所有传入的GET / POST数据是否存在恶意代码。如果检测到,我们想要从服务器发出禁令。虽然搜索了所有数据,但我对性能有点担心。
使用PHP,我们目前正在做这样的事情:
$t = $_POST['example'];
if(
(strpos($t, 'hex') && strpos($t, 'unhex')) ||
(strpos($t, 'etc') && strpos($t, 'passwd')) ||
strpos($t, 'information_schema')
)
// Initiate ban of IP
有更有效的方法吗?目标是不要将资源浪费在错误的请求上。"我们使用准备好的陈述,因此它是一个性能问题而不是安全性。黑名单发生在Juniper级别,这意味着数据库服务器,文件服务器等在最初的错误请求之后根本不会紧张。
仅供参考:像OSSEC这样的节目在平局上太慢了。它们通常允许20-40个请求在实际响应并开始禁止过程之前得到处理。在应用程序层,我们可以捕获第一个请求。这可能看起来无关紧要,但是当你被100多个IP地址攻击时,捕获第一个请求会产生很大的不同。
答案 0 :(得分:0)
您正在做的是将您可能通过表单收到的某些表达列入黑名单。 这不是最有效的做法,因为攻击者可以使用您未考虑的替代方案,以绕过您的控制。
防止sql注入的最佳做法是根据您要允许的内容将内容列入白名单。
以下内容来自Cisco website on SQL injection:
在应用程序本身中,有两种输入方法 可以抵御SQL注入攻击的验证:黑名单 和白名单。有黑名单,具体,已知恶意 用户输入中删除或替换字符。虽然这个 方法通常是实施的,主要是因为它可以很容易 完成后,与白名单相比,它没有效果。 黑名单可能无法正确处理复杂的混淆 可能允许攻击者破坏过滤器并可能注入SQL 声明。这种失败通常是由于攻击的演变而发生的 技术和过滤器不全面或未实现 正确。
或者,白名单会根据a检查每个用户输入 允许的字符列表。这种方法更有效 减轻SQL注入的风险,因为它更具限制性 关于允许哪种类型的输入。实现良好的 白名单应检查每个用户提供的数据 预期的数据格式。
根据您使用的方法类型以及您希望接收的数据类型,您将有不同的性能来检查SQL注入。