【问题标题】:SQL Injections PDO ProtectSQL 注入 PDO 保护
【发布时间】:2015-08-20 02:21:33
【问题描述】:

我有一个问题 在我的应用程序中,所有 SQL 查询都使用 PDO。例如注释:

<?php
   include "config.php";
   $User_Check = $_SESSION['Login_User'];
   if ($_SERVER["REQUEST_METHOD"] == "POST") {  
     Notes = $_POST["Notes"];  
     try {
        $sql = $conn->prepare('UPDATE Accounts SET Notes = :Notes WHERE   Username  = :User_Check');
        $sql->execute(array('Notes' => $Notes, 'User_Check' => $User_Check));
        header('Location: home.php?Message=Uspesno');
     } catch(PDOException $e) {
        header('Location: home.php?Message=Greska');
     }
   }
   $sql = $conn->prepare('SELECT Notes FROM Accounts WHERE Username =   :User_Check');
   $sql->execute(array('User_Check' => $User_Check));
   $row = $sql->fetch(PDO::FETCH_ASSOC);
   $SelectNotes = $row['Notes'];
   conn = null;
?>

现在我想知道这种方式有多安全?任何人都可以进行 SQL 注入吗?我是否需要添加其他形式的保护?谢谢!

【问题讨论】:

  • 对于最常见的事情你是安全的,但进一步清理你的输入变量不会有什么坏处。喜欢$Notes = filter_var($_POST["Notes"], FILTER_SANITIZE_STRING);

标签: php mysql sql-server pdo


【解决方案1】:

使用 PDO,您不需要转义字符串来防止 sql 注入,因为 prepare fx 可以完成这项工作。

所以是的,您的请求是安全的。

【讨论】:

  • 准备好的语句仍然可能被滥用(字符串连接),在这种情况下,您与其他任何事情一样容易受到 SQL 注入的攻击。 PDO 并不能神奇地解决这个问题。
【解决方案2】:

只要传递给prepare() 的字符串是静态的(即不包含任何变量),就应该避免 SQL 注入。

重要的部分是将用户输入与您的 SQL 语句分开,您可以通过将 SQL 传递给 prepare() 并将用户输入传递给 execute() 来做到这一点。

类似问题:How does a PreparedStatement avoid or prevent SQL injection?
(问题标记为 ,但问题和答案都不是 Java 特有的。)

【讨论】:

    猜你喜欢
    • 2011-06-26
    • 2016-06-16
    • 2020-08-08
    • 2010-09-14
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多