2012-11-12 84 views
0

可能重复:
how safe are PDO prepared statementsPDO安全问题

所以我一直在寻找到PDO来取代我的PHP所有的MySQL查询。我这样做的主要原因是安全性和编码方便。就安全而言,我只是想知道。一旦我完成替换任何mysql查询调用以及从PDO用户捕获的任何数据,我应该考虑将准备和执行查询放在什么位置?或者会照顾安全。我想我只是不明白PDO的安全性。这里是我的一些获取用户输入然后将其放入数据库的代码示例。这有什么问题吗?或者我可以做的改进?

<?php 
session_start(); 
include("dbgear.php"); 

$var1 = $_POST['stuff1']; 
$var2 = $_POST['stuff2']; 
$var3 = $_POST['stuff3']; 
$var4 = $_POST['stuff4']; 
$var5 = $_SESSION['stuff5']; 
$vardate = date("M d, Y h:i A"); 


$info = "INSERT INTO comments SET  name=:user,class=:class,comment=:commentarea,date=:date,detector=:detector"; 


$send = $connect->prepare($info); 
$send->execute(array(':user'=>$var1,':class'=>$var2,':commentarea'=>$var3,':date'=>$var4,':detector'=>$var5)); 

?> 
+0

安全性(实际上是一种副产品)来自SQL命令从数据值分别发送到服务器,不会发生字符串插值。在真正准备好的语句模式中,也就是说。在PDO仿真模式下, - > execute将简单地转义原始值。这就是为什么你不必打扰。 (关于值。与动态标识符或变体查询不同[...](http://stackoverflow.com/a/8255054/345031)) – mario

回答

1

你不必担心你放入数据库的内容。一切(安全方面)都由PDO处理。

但请记住,如果您稍后在网站上使用数据,它可以包含JavaScript(XSS注入)。因此,在将数据输入数据库之前,请始终过滤您的用户数据,将整数转换为int,过滤用户上传的html等,以获得最安全的方法。