2013-10-08 55 views
-1

我已经对注入/ XSS攻击如何工作做了一些研究。看起来黑客只是简单地使用USER INPUT字段来输入代码。SQL注入/ XSS攻击可能与preg_replace?

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

黑客仍然能够注入/破解我的网站吗?

谢谢!

+0

这是对问题最糟糕的解决方案。你知道还有什么可行的吗?停止接受任何用户输入。 – meagar

+0

哈哈是的我明白,这不是最优化的解决方案。但是,如果我的网站非常简单,只需要用户输入字母数字呢?所以从理论上讲,这是正确的?如果所有的用户输入都受到限制,不用担心黑客入侵。 – moshimoshi

+0

你仍然在以错误的方式解决它。仅仅因为它在狭义的环境下工作并不意味着这是一个很好的解决方案。只需使用为此问题明确提供的解决方案,该解决方案可在任何地方使用*,以便所有开发人员都了解。 – meagar

回答

1

简短版本:不要这样做。

龙版本:

假设你有

SELECT * FROM my_table WHERE id = $user_input 

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

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

但是:

  • 你必须确保你正确地执行你的逃生功能。
  • 这对最终用户来说是令人难以置信的烦人。例如,如果这是一个文本字段,为什么不允许空格?那么á?如果我想引用""?用<写一个数学表达式(甚至写一些明显无害的东西,例如i <3 u)?

所以,现在你有:

  1. 一个自制的解决方案,它必须检查的正确性(和可能有错误,因为任何其他功能)。此功能中的错误是潜在的安全问题;
  2. 对于其他程序员不熟悉的解决方案,他们必须习惯它。没有通常的转义函数的代码通常是错误的代码,所以它是非常令人惊讶的;
  3. 解决方案是脆弱。如果其他人修改你的代码并忘记添加验证会怎么样?如果忘记验证?

您正在关注解决已经解决的问题。为什么浪费时间做一些需要时间来开发的东西,而当其他人已经开发出适合使用的适当解决方案时,很难维持。

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

弃用的API应该被那些没有足够的时间或资源进行迁移的开发者的遗留应用程序使用。从头开始时,请使用支持的API。