Php 准备好的报表和美元(有安全问题吗?)
可能重复:Php 准备好的报表和美元(有安全问题吗?),php,pdo,prepared-statement,mysql-real-escape-string,Php,Pdo,Prepared Statement,Mysql Real Escape String,可能重复: 如果我在PDO中使用$_GET,我还需要逃避它吗?我的理解是,这是免疫SQL注入,但我仍然感到不安,无法逃脱它。有人能看看这段代码,告诉我它是否安全吗 <?php $hostname = 'localhost'; $username = 'root'; $password = 'root'; $database = 'database'; try { $dbh = new PDO("mysql:host=$hostname;dbname=$database", $us
如果我在PDO中使用$_GET,我还需要逃避它吗?我的理解是,这是免疫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;
?>
再说一次,我关心的是你的收入。非常感谢您提供的任何帮助。是的,准备好的声明功能做到了它所说的。但既然你问了,让我们清楚这还不是故事的结局。我在看电视 例如:
- 是否每个远程用户都有权访问与每个PID相关的数据?如果没有,则未检查用户是否已授权就是OWASP 2010-A4-不安全直接对象引用的明显示例
- 您可能并不认真对待明文中的密码硬编码,因为这是OWASP 2010-A7-不安全加密存储的一个明显示例
- 除了回显行数之外,您没有说明使用$stmt可以做什么,但是如果显示数据库中的任何内容,您当然会首先小心地转义HTML实体。否则,您将创建一个OWASP 2010-A2-跨站点脚本(XSS)的清晰示例
- 顺便说一下,通常最好显式指定列(或聚合函数),而不是“选择*”