2011-08-03 102 views
0

我需要使用get函數從url中檢索$ title變量。

$title=$_GET["title"]; 

$ title稍後將用於MySQL查詢。

問題是如何使這個安全嗎? 換句話說,如何抵消通過URL發送的任何惡意代碼。

+2

可能的重複http://stackoverflow.com/search?q=sanitize+php – Gordon

+1

看看這個questin:http://stackoverflow.com/questions/4749588/protect-against-sql-injection – enricog

回答

5

(對於「secure」的值等於「以防止它打破數據庫」):使用任何使用bound parameters的數據庫API。

綁定參數傾向於讓數據庫處理轉義(因此使用由數據庫作者而不是語言作者編寫的轉義例程),並使用不太容易被遺忘的語法,然後手動轉義每條輸入數據(例如)mysql_real_escape_string

您可能需要在以後採取其他步驟,你在不同的上下文做對數據進行處理之前(例如,使其安全地插入到HTML文檔)

0

您可以使用mysql_real_escape_string功能(轉義特殊字符在SQL語句中使用的字符串)

Php Manuel

1

必須使用mysql_real_escape_string(),以逃避可能與你的數據庫干擾的所有字符。如果您顯示此標題,您還應該使用htmlentities()或striptags()

0

使用查詢參數。有許多不同的方法可以從PHP連接到mysql,並且它們使用參數的方式因框架而異。下面是使用PDO爲例:

$dbh = new PDO('mysql:dbname=test;host=127.0.0.1', 'username', 'password'); 
$sth = $dbh->prepare("select * from table where title = :title") 
$sth->execute(array(':title' => $_GET["title"])); 
$rows = $sth->fetchAll(); 

var_dump($rows); 
1

由於PHP 5.2,你可以使用filter_input()和filter_input_array()來消毒和驗證的$ _GET或$ _POST數據。

例如:

$my_string = filter_input(INPUT_GET, 'my_string', FILTER_SANITIZE_STRING); 

瞭解更多關於本文here英寸

對於SQL查詢,建議您使用PDO和預準備語句來防止SQL注入。您可以在PHP手冊here中閱讀關於PDO的內容。