3

可能重复:
在 PHP 中防止 SQL 注入的最佳方法?

我一直在做一些关于 SQL 注入的研究,但我有一些我找不到答案的问题。难道不能防止字符串级别的SQL注入攻击吗?我的意思是,我们不能阻止它吗?

  • 在通过 mysql 查询处理它们之前找到非法字符?

    $postID = $_POST['id'];
    if($postID contains characters)
        remove characters;
    if($postID still contains characters)
        then exit;
    else
        mysql_real_escape_string($postID); //just in case?
    continue to do whatever you are doing...
    

真的有必要使用 PDO/mysqli 的东西吗?分析要在mysql中处理的sql字符串是否足够?请记住,在回复时我不是 PHP 或 MySQL 专家。我是一个试图了解他们的人。

4

6 回答 6

4

当然,您可以使用 来防止注入mysql_real_escape_string($postID),只要您不介意每次调用该函数时都进行查询。

PDO 和 MySQLi 提供的不仅仅是注入保护。它们允许准备好的语句,可以在不多次调用数据库的情况下保护反注入。这意味着更快的整体性能。想象一下尝试向一个表中插入一个包含 30 列的用户记录......这是很多mysql_real_escape_string()调用。

准备好的语句与查询一起发送所有数据,并在一个请求中将其转义到服务器上。Mysql DB 支持prepared statments,旧的php mysql_ 库不支持。

是时候继续使用 mysqli 或者最好是 PDO 了——你永远不会回头。

于 2012-10-30T21:08:14.783 回答
2

我鼓励您使用 PDO(PHP 数据对象)。它将有助于防止 SQL 注入并加快查询速度。此外,您的应用程序从数据库中变得更加抽象。

类似于以下内容:

$stmt = $conn->prepare("INSERT INTO table_name VALUES(:id, :firstname, :lastname)");
$stmt->bindValue(':id', $id);
$stmt->bindValue(':firstname', $firstname);
$stmt->bindValue(':lastname', $lastname);
$stmt->execute();
于 2012-10-30T21:13:47.990 回答
0

我不再鼓励您使用 mysql_ 函数,因为它们已被弃用。检查:http : //php.net/manual/en/function.mysql-real-escape-string.php 以获取有关常规 mysql_ 已停产原因的更多信息。你可以很容易地切换到mysqli。真的没那么复杂。另外,如果您想转义字符并且不想为新的转义方式替换每个 mysql_real_escape_string ,则可以使用此函数:

function mysql_string_safe($stringtoclean)
{ 
    //In this case, 
    $safestring = mysqli_real_escape_string('your_handle_here',$stringtoclean);
    return $safestring;
}

那么你可以用 mysql_real_escape_string 替换 mysql_string_safe。mysqli 与 mysql_ 非常相似,但更安全。我已经切换到它并没有花费太长时间,这很容易,因为它只是替换东西。连接到数据库也不同。另一方面,PDO 支持不同的数据库驱动程序,但如果您想节省时间并且不打算切换数据库驱动程序,只需使用 mysqli。

于 2012-10-30T21:10:38.357 回答
0

如果您的 ID 是整数,请使用

$postID = (int)$_POST['id'];

当然,在该行之后验证 $postID 是否为 != 零。

于 2012-10-30T21:13:18.103 回答
0

真的有必要使用 PDO/mysqli 的东西吗?

不。

分析要在mysql中处理的sql字符串是否足够?

不。

学习资料

编码安全控制

不要编写自己的安全控制!在为每个 Web 应用程序或 Web 服务开发安全控制时重新发明轮子会导致时间浪费和大量安全漏洞。OWASP 企业安全 API (ESAPI) 工具包可帮助软件开发人员防范与安全相关的设计和实施缺陷 - https://code.google.com/p/owasp-esapi-php/

于 2012-10-30T21:26:06.380 回答
-2

只需使用 PDO 并准备您的陈述。

于 2012-10-30T21:22:41.360 回答