GET(任何安全问题?)

可能重复:
准备好的语句如何防止SQL注入攻击?

如果我使用$ _GET和PDO,我还需要逃避它吗? 我的理解是,这对SQL注入是免疫的,但是我仍然对不转义它而感到不安。 那么有人可以看看这个小块代码并告诉我它是否安全?

<?php
$hostname = 'localhost';
$username = 'root';
$password = 'root';
$database = 'database';
try {
    $dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $dbh->prepare("SELECT * FROM comments WHERE pid = :pid");
    $pid = $_GET['pid'];
    $stmt->bindParam(':pid', $pid, PDO::PARAM_STR);
    $stmt->execute();
    $result = $stmt->fetchAll();
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
    $stmt->execute();
    echo $stmt->rowCount();
$dbh = null;
?>

再一次,这是我关心的$ _GET。 任何帮助表示赞赏,谢谢。


是的,准备好的陈述功能完成它所说的内容。 但是既然你问了,我们要清楚,这不是故事的结尾。 我正在研究2010年OWASP十大应用安全风险。

例如:

  • 每个远程用户都有权访问与每个PID相关的数据吗? 如果没有,则检查用户是否被授权是OWASP 2010-A4-Insecure直接对象引用的明显例子。
  • 您可能并不认真对待密码的明码格式,因为这是OWASP 2010-A7-Insecure Cryptographic Storage的一个明显例子。
  • 除了回显rowcount之外,您不会说明使用$ stmt可能会做什么,但是当然如果您显示数据库中的任何内容,则首先会小心地转义HTML实体。 否则,您会创建一个OWASP 2010-A2-Cross-Site Scripting(XSS)的清晰示例。
  • 顺便说一下,通常更好的是明确指定列(或聚合函数),而不是“SELECT *”。
  • 链接地址: http://www.djcxy.com/p/93777.html

    上一篇: GET (Any security concerns?)

    下一篇: PHP: Injection protection using prepared statements