有關PDO防sql注入問題

來源:互聯網
上載者:User
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 有需要特別注意什麼嗎?


回複討論(解決方案)

確實是新手,還不知道 PDO::quote 方法的存在
用PDO需要升到5.3.6,是因為直到5.3.6,PDO才具有實用價值。之前的所有版本都存在著各種嚴重問題

prepare 準備
bindParam 綁定參數
這是為一條SQL多次使用(僅參數不同)準備的,而無需每輪都組裝查詢串

php 是通過 magic_quotes_gpc 來決定是否對外來資料做轉義處理的
php 5.3.6及以後預設關閉
php5.4.0及以後忽視它的存在
也就是說:安全問題是你自己的問題,php不打算替你完成了

用了
prepare
bindParam

是否也不足夠

要用PDO::quote?

那想請問一下

用quote的話不是取代了prepare?
就不能預先處理或者批量insert?

預先處理後用 execute 和 直接用 query 是兩條路
quote 是轉義,對於預先處理後的 execute 會自動隱式執行
對於 query 需自己顯式的執行

預先處理後用 execute 和 直接用 query 是兩條路
quote 是轉義,對於預先處理後的 execute 會自動隱式執行
對於 query 需自己顯式的執行

明白了??

但是....
$sql = "INSERT INTO foo (id,name) VALUES ('',:name)";
$stmt = $pdo->prepare($sql);

$stmt->bindParam(':name', $name);

$name = $pdo->quote($_POST["name"]);

$stmt->execute();


比如我輸入:peter's book

但為什麼會儲存成'peter's book'

這是正常的嗎?

我輸出是要做些處理?
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.