2014-09-28 60 views
1

我有一個簡單的步驟,從SQL數據庫中刪除行..簡單的PHP函數對SQL注入安全嗎?

<?php 
global $wpdb, user_ID; 
$tmp_mid = $_GET['mid']; 
if (!empty($tmp_mid)) 
{ 
    $id_check = $wpdb->get_var($wpdb->prepare("SELECT message_to_user_ID FROM " . $wpdb->base_prefix . "messages WHERE message_ID = %d", $tmp_mid)); 
    if ($id_check == $user_ID) 
    { 
     $wpdb->query($wpdb->prepare("DELETE FROM " . $wpdb->base_prefix . "messages WHERE message_ID = %d", $tmp_mid)); 
    } 
} 
?> 

我要確保,如果$ USER_ID匹配從該行的$ tmp_mid該行只能刪除。所有似乎都正常工作,但是這個例程容易受到SQL注入?

我需要做任何事情來保護它嗎?

+4

這個問題似乎是脫離主題,因爲它是要求http://codereview.stackexchange.com/ – Quentin 2014-09-28 13:36:41

+0

@Quentin我很想去關閉相同的投票,或http:// stackoverflow .com/questions/60174/how-can-i-prevent -sql -injection-in-php?rq = 1 – 2014-09-28 14:00:41

+0

@ Fred-ii- - 這是一個有點特殊的IMO,wordpress,可以很好地解決這個問題。 – Quentin 2014-09-28 14:01:32

回答

3

您的代碼不易受SQL-Injection影響。

編輯:作爲DCoder指出的那樣,你是從sql-injection安全的,因爲這種方法WP最終運行mysqli_real_escape_string()功能在您輸入正確消毒!儘管如此,你仍然沒有使用預先準備好的語句,但它很好。

+2

問題中的代碼已經使用了準備好的語句(不是以一種有助於SQL注入的方式,但您確實需要詳細說明)。 – Quentin 2014-09-28 13:38:57

+0

@Quentin我不能真正發現在給定的代碼中使用準備好的語句的位置。我沒有看到'bind_param'或其他類似方法的使用 – 2014-09-28 13:41:39

+0

準備好的語句:http://note.io/1vpvdvr – Quentin 2014-09-28 13:42:41

0

使用mysql_real_escape_string。

$ tmp_mid = mysql_real_escape_string($ _ GET ['mid']);

如果$ tmp_mid只能是一個整數,則可以從該變量中除去所有非數字數字。

儘管在所有情況下都不能完全依賴該功能。

+0

問題中的代碼似乎沒有使用(過時的,不贊成使用的,很快就會變得不可用)'mysql_'接口,所以這可能會失敗,因爲沒有使用'mysql_'打開連接。 – Quentin 2014-09-28 13:41:18