2010-03-29 35 views
1

我得到這個SQL查詢,其中從$ _GET採取POST_TITLE如何清理這個特定的mysql查詢?

$ SQL = 「SELECT ID FROM帖裏posts.post_title = '5 - 設計 - 網絡 - 多彩'」;

什麼是最好的方式來消毒,並使其更安全?

編輯:(根據要求)我試圖創建一個插件,可以隱藏某個特定類別(名爲private)及其所有未登錄來賓的帖子。我有'pre_get_posts'和'posts_selection'鉤子能夠控制如何顯示特定的職位和類別的管理員,誰寫他們,其他成員和客人的成員。

該類別必須不存在。所以它不能在前端的cat archive頁面上顯示。

我知道這與問題無關,導致瞭如何清理郵件的名稱/標題。而已。

+0

所以你想確保_identifier_沒有被篡改。列名「$ wpdb-> posts.post_title」是唯一的「問題」還是'$ wpdb-> posts'也是一個問題? – VolkerK 2010-03-29 07:53:38

+0

VolkerK:我讀到這個問題意味着$ _GET取自'5-desain-web-colorful'(即post_title字段的值)。你能澄清,justjoe? – Anonymoose 2010-03-29 07:58:41

+0

@all:對不起,這是wordpress查詢。我將首先編輯這些sql – justjoe 2010-03-29 08:02:44

回答

3

使用mysql_real_escape_string,假設你使用MySQL。

+1

對於只插入的字符串,我可以加上: '... $ wpdb-> posts.post_title ='「.mysql_real_escape_string($ str)。」'「;' – Franz 2010-03-29 07:41:38

3

雖然這不能直接回答你的問題,但更好的方法是使用綁定參數。這可以保護您免受此類別的所有攻擊媒介。

http://php.net/manual/en/pdo.prepared-statements.php

http://www.php.net/manual/en/pdostatement.bindparam.php

對於示例:

$sth = $dbh->prepare("select id from $wpdb->posts where $wpdb->posts.post_title = ?"); 
$sth->bindParam(1, $str); 
$sth->execute(); 

注意:這假定WPDB $是安全的!

+0

在我看來,OP意味着這個。 – Josh 2010-03-29 08:01:39