使用preg_replace可以进行SQL注入/ XSS攻击吗?

时间:2013-10-08 20:30:26

标签: sql xss code-injection

我已经对注射/ XSS攻击如何工作做了一些研究。似乎黑客只是使用USER INPUT字段来输入代码。

但是,假设我仅使用带有preg_replace的字母数字(a-zA-Z0-9)限制每个USER INPUT字段,并假设我使用即将被弃用的my_sql而不是PDO或my_sqli。

黑客仍然可以注入/破解我的网站吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

简短版本:不要这样做。

长版:

假设你有

SELECT * FROM my_table WHERE id = $user_input

如果发生这种情况,那么一些输入(例如CURRENT_TIMESTAMP)仍然可能,但“攻击”将被限制在可能无害的点。这里的解决方案可能是将输入限制为[0-9]

在字符串("$user_input")中,问题甚至不应存在。

然而:

  • 您必须确保正确实现转义功能。
  • 最终用户非常讨厌。例如,如果这是一个文本字段,为什么不允许使用空格?那么á呢?如果我想引用""的某人,该怎么办?用<写一个数学表达式(甚至写一些看似无害的东西,如i <3 u)?

所以现在你有:

  1. 自制程序解决方案,必须检查其是否正确(并且可能存在错误,与任何其他功能一样)。此功能中的错误是潜在的安全问题;
  2. 其他程序员不熟悉的解决方案,他们必须习惯它。没有通常的转义函数的代码通常是错误的代码,因此它非常令人惊讶;
  3. 脆弱的解决方案。如果其他人修改您的代码并忘记添加验证怎么办?如果忘记了验证怎么办?
  4. 您正专注于解决已经解决的问题。为什么浪费时间做一些需要时间来开发的东西,并且当其他人已经开发出几乎不需要努力使用的适当解决方案时,很难维持。

    最后,don't use deprecated APIs。事情因某种原因而被弃用。弃用可能意味着“我们会在任何时候放弃支持”或“这有严重问题,但我们无法解决这个问题”。

    过时的API应该由没有足够时间或资源进行迁移的开发人员的遗留应用程序使用。从头开始时,请使用支持的API。