我需要使用get函數從url中檢索$ title變量。
$title=$_GET["title"];
$ title稍後將用於MySQL查詢。
問題是如何使這個安全嗎? 換句話說,如何抵消通過URL發送的任何惡意代碼。
我需要使用get函數從url中檢索$ title變量。
$title=$_GET["title"];
$ title稍後將用於MySQL查詢。
問題是如何使這個安全嗎? 換句話說,如何抵消通過URL發送的任何惡意代碼。
(對於「secure」的值等於「以防止它打破數據庫」):使用任何使用bound parameters的數據庫API。
綁定參數傾向於讓數據庫處理轉義(因此使用由數據庫作者而不是語言作者編寫的轉義例程),並使用不太容易被遺忘的語法,然後手動轉義每條輸入數據(例如)mysql_real_escape_string
。
您可能需要在以後採取其他步驟,你在不同的上下文做對數據進行處理之前(例如,使其安全地插入到HTML文檔)
您可以使用mysql_real_escape_string功能(轉義特殊字符在SQL語句中使用的字符串)
必須使用mysql_real_escape_string(),以逃避可能與你的數據庫干擾的所有字符。如果您顯示此標題,您還應該使用htmlentities()或striptags()
使用查詢參數。有許多不同的方法可以從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);
可能的重複http://stackoverflow.com/search?q=sanitize+php – Gordon
看看這個questin:http://stackoverflow.com/questions/4749588/protect-against-sql-injection – enricog