-1

我对注入/XSS 攻击的工作原理进行了一些研究。似乎黑客只是利用 USER INPUT 字段来输入代码。

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

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

谢谢!

4

1 回答 1

1

简短版:不要这样做。

长版:

假设你有

SELECT * FROM my_table WHERE id = $user_input

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

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

然而:

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

所以现在你有:

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

你专注于解决一个已经解决的问题。当其他人已经开发出几乎不费吹灰之力的适当解决方案时,为什么还要浪费时间做一些需要时间开发且难以维护的事情。

最后,不要使用已弃用的 API。东西被弃用是有原因的。已弃用可能意味着诸如“我们将随时放弃支持”或“这是有严重问题但由于某种原因我们无法修复它”之类的东西。

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

于 2013-10-08T20:45:34.387 回答