2

所以我一直想知道,在上一个问题中被建议使用 PDO 准备语句之后,为什么在连接到我的数据库以在这样的实例中使用它们时它很重要?

例如使用$_SERVER['REMOTE_ADDR']

我的意思是,如果没有人知道我正在使用数据库,他们不知道我在寻找什么,而我在数据库中寻找的东西(假设他们知道)是一个 IP 地址,为什么要它事情?这是 XSS 攻击的问题吗?

真正的问题。在这种情况下,永远无法找到使用 PDO 语句(或类似方法)的任何理由。确定我不是脆弱的吗?

4

5 回答 5

6

所以你根本没有清理你的输入?真的吗?

当您有一个名为“Bob O'Reilly”的用户时会发生什么?你的代码能应付吗?你试过了吗?

或者如果有人在数字字段中输入字母会发生什么。你的代码能应付吗?

SQL 数据清理不仅仅是防止黑客攻击;它允许输入日常数据,而不必担心它是否包含引号或其他会破坏查询的字符。

防止黑客入侵是一件非常好的事情,但即使这不是考虑因素,您仍然需要清理您的数据库输入。

...如果没有人知道我正在使用数据库...

他们猜测,黑客并不“知道”;他们尝试了一些常见的黑客技术,看看会发生什么。如果该站点以他们希望的方式做出响应,那么他们就知道它很脆弱。那是他们真正开始攻击你的时候。

这些调查黑客通常是自动化的,只是在网络上搜寻要攻击的网站;只要上网,您就会很容易受到攻击。不要仅仅因为你是默默无闻的,或者因为没有人知道你的代码,或者因为没有人想破解你,就认为你是安全的。他们会找到你,他们会入侵你。

于 2013-01-17T16:18:05.693 回答
2

当您从 GET 或 POST 请求或从 Cookie 中获取值并使用该值来构建将要查询的字符串时,收到的数据可能已被恶意用户正确设置以将您的原始查询转换为一个不同的(使用不同的 SQL 语句)并控制您的数据。

这里就不一一解释了,Google for SQL injection

当您使用“准备好的语句”时,几乎不可能使用传递的数据来更改查询语句。

编辑

例如使用 $_SERVER['REMOTE_ADDR']

如果唯一的值是那个值,那么你就很安全了。但是,谁知道...

也许将来会发现的 PHP 中的错误将允许客户端更改该值以调整您的查询...

怀疑坚持准备好的陈述模式。这对你来说有什么代价?

于 2013-01-17T16:07:21.737 回答
1

使用准备好的语句,即使它可能不是绝对必要的,也会让您保持默认生成安全代码的心态,并避免您认为输入安全但实际上并不安全的情况(例如,$_SERVER['HTTP_HOST']看起来安全,但不一定) . 是的,特定的变量$_SERVER['REMOTE_ADDR'] 应该是安全的,但特别小心不会丢失任何东西。

于 2013-01-17T16:17:59.390 回答
0

在你的 sql 语句中使用过你的 php vars?对于 where / order / limit 子句?如果是,则使用带有转义变量的 PDO 语句。

如果将来您迁移到 SQLServer、SQLite……您只需要用 PDO 更改驱动程序连接器(1 个代码行)。使用 mysql/mysqli,您必须更改所有 php 代码。

于 2013-01-17T16:06:32.807 回答
0

PDO 有助于阻止攻击者提供的任意 SQL(SQL 注入)的执行。

如果攻击者可以在您的服务器上执行他们喜欢的任何 SQL,那么他们可以从数据库中检索/编辑数据,此外,在某些 DBMS 中,他们将能够根据所采取的安全措施访问/创建可能在您的 webroot 中的文件。

于 2013-01-17T16:06:53.510 回答