2011-12-13 57 views
0

它對我的數據庫表編輯兩個字段(note_name和note_description),我需要從一個形式類似這樣的鏈接,並在新的領域的一些信息:通過LINKS進行SQL注入?

LINK:

/main_edit.php?edit=note_name2&type=PHP 

AND:

elseif(isset($_GET['edit'])){ 
     $note_type=$_GET['type']; 
     $old_note_name=$_GET['edit']; 
     $new_note_name=mysql_real_escape_string($_POST['new_note_name']); 
     $new_note_description=mysql_real_escape_string($_POST['new_note_description']); 
     $query="UPDATE functions 
       SET note_name='{$new_note_name}', 
       note_description='{$new_note_description}' 
       WHERE note_name='{$old_note_name}' 
       "; 
     $result = mysql_query($query, $connection);} 

是SQL注入通過鏈接可能在這裏,如果是的話如何保護它呢?

謝謝!

回答

-1

是 - 你是不是出於某種原因逃脫$old_note_name,與它是在查詢到底是最脆弱的變量。你似乎知道該怎麼做......就像對其他人使用mysql_real_escape_string那樣。

否則,這一切將採取: /main_edit.php?type=PHP&edit=note_name2';drop table functions;#

+0

供參考:通常情況下,一個離開的時候反對投票,以便回答者可以改善他們的答案評論。沒有評論的反對票沒有意義。 – 2011-12-13 22:28:56

1

是因爲你不是在逃避$_GET['edit'] ..什麼要試試這個:

$old_note_name=mysql_real_escape_string($_GET['edit']); 
0

更改此設置: -

$old_note_name=$_GET['edit']; 

$old_note_name= mysql_real_escape_string($_GET['edit'], $connection); 

並申請$連接到所有通話的功能mysql_real_escape_string

最後,看看mysqliPDO

4

你可以使用預處理語句,是這樣的:

$query = "UPDATE functions SET note_name=?, note_description=? WHERE note_name=?"; 
$statement = $connection->prepare($query); 
$statement->bind_param('sss', $new_note_name, $new_note_description, $old_note_name); 
$statement->execute(); 
+2

如果可以的話,我會+1000。停止連接字符串以進行SQL查詢,使用預先準備好的語句。 – Arkh 2011-12-13 17:37:52