有关PDO防sql注入有关问题

WBOY
Lepaskan: 2016-06-13 11:59:29
asal
881 orang telah melayarinya

有关PDO防sql注入问题

本帖最后由 sky94132003 于 2014-06-10 03:40:33 编辑 php还算新手
最近才开始转用pdo的


请教一
以前知道用mysql_real_escape_string

但是最近才知道 pdo是不能用mysql_real_escape_string
因为这个函数好像是要用mysql_connect() 先连好才能用的

还知道了要用bindParam这类的写法配合预处理


$stmt = $dbh->prepare ("INSERT INTO user (firstname, surname) VALUES (:f-name, :s-name)");
$stmt -> bindParam(':f-name', 'John');
$stmt -> bindParam(':s-name', 'Smith');
$stmt -> execute();


想请教一下bindParam是否已经足够安全?

还是用bindValue会更好?



请教二

相比mysql_real_escape_string好像麻烦点?

mysql_real_escape_string 处理后....写入数据库时

Tom's Book  在PHP中显示处理成  Tom\'s Book

但写入数据库中,是只保存 Tom's Book

这一点在前台显示时,是非常方便的,因为毕竟的纯粹的SELECT麻,也应该没什么安全问题...吧?

但是问题来了

既然bindParam自动加上了转义,甚至保存到数据库中,那我不知道前台有什么地方需要用到stripslashes()这个函数

难度每个地方都加吗?

有关这问题只有三个可能吧?

1. PDO有其他防SQL注入的方法??  保存时可以不用保存 "\" 这符号?
2. 有可能有配置文件加入一些东西...把全站都加上stripslashes()?   貌似不太可行?
3. 老老实实,除了日期或分类ID之外的,慢慢的一个个加上?



另外也想请教一下
$stmt = $dbh->prepare ("INSERT INTO user (firstname, surname) VALUES (:f-name, :s-name)");
$stmt -> bindParam(':f-name', 'John');
$stmt -> bindParam(':s-name', 'Smith');
$stmt -> execute();

除了用"?"以外,这一类的写法算合理吗?  

还有,官方也提议我们用PDO需要升到5.3.6?  那还是直接升5.4 有需要特别注意什么吗?
------解决方案--------------------
预处理后用  execute 和 直接用 query 是两条路
quote 是转义,对于预处理后的 execute 会自动隐式执行 
对于 query 需自己显式的执行
Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!