2013-02-18 43 views
3

我有一個簡單的評論系統,用戶輸入文本到textarea,一個PHP腳本運行,檢查用戶是否登錄,如果按下提交併且所有內容都被填寫 - 它會繼續插入數據。我的問題是,我需要什麼來逃避/修剪/剝離?現在我的查詢看起來是這樣的:從textarea插入數據時,查詢中需要轉義什麼?

$sql = $con->prepare("INSERT INTO Comments (user, comment, pageid, time) VALUES (:user, :comment, :pageid, NOW())"); 
$sql->bindValue(":user", $user, PDO::PARAM_STR); 
$sql->bindValue(":comment", $comment, PDO::PARAM_STR); 
$sql->bindValue(":pageid", $pageid, PDO::PARAM_INT); 
$sql->execute(); 

變量使用POST方法來自於形式。這是安全的SQL注入或我需要做一些額外的修剪和轉義之前插入數據?

+3

是的,這足以防止SQL注入。您可能對[The Great Escapism(或:您需要知道如何處理文本中的文本)]感興趣](http://kunststube.net/escapism/)。 – deceze 2013-02-18 12:43:20

+2

閱讀:http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php – Daniel 2013-02-18 12:46:11

+2

這個公式實際上有兩個部分。你的問題涉及第一部分,存儲數據,你會得到很好的信息。第二部分涉及檢索並顯示它。如果有人在textarea中寫入一些html或js,並將其顯示在網頁上,它將會執行,除非您做了某些事情來防止。如果php有與ColdFusion的htmleditformat()相同的東西,請使用它。 – 2013-02-18 12:50:08

回答

3

只要你在準備好的語句和佔位符中使用PDO,你幾乎可以像安全一樣安全。

我會建議,雖然使用 - > execute()與數組,它比手動綁定變量更簡單。

$sth = $con->prepare('INSERT INTO Comments (user, comment, pageid, time) VALUES (?, ?, ?, NOW())'); 

$sth->execute(array($user, $comment, $pageid)); 
+1

±1它可能更簡單,但綁定參數對於類型安全性更好。你不能在'execute()'中指定'PDO :: PARAM_ *'常量。 – deceze 2013-02-18 12:47:52

+0

我明白了,所以只要我準備好我就很安全。感謝array()提示,這使事情變得更簡單! – ejx 2013-02-18 12:49:15