2012-03-30 21 views
0

我有一個調用一個AJAX負荷和結果加載到#myresults DIV搜索頁面(search.php中):AJAX,PHP,JSON和查詢字符串:如何安全有效地傳遞變量?

$('#myresults').load('results.php', {"q":"<?php echo urlencode($this->params['url']['q']); ?>","min":<?php echo urlencode($this->params['url']['min']); ?>,max:<?php echo urlencode($this->params['url']['max']); ?>}); 

查詢字符串看起來像:

http://www.mydomain.com/search?q=test&min=50&max=100 

results.php外觀像這樣:

if (isset($data['q']) && isset($data['min']) && isset($data['max'])) { 
$q = urldecode($data['q']); 
$min = urldecode($data['min']); 
$max = urldecode($data['max']); 
} 

我抓住查詢字符串值,然後將它們發佈到結果頁面。是URLEncode需要還是應該使用htmlspecialchars()?我見過JSON.stringify(),我只是不確定如何「最好」編碼我的數據(以便它不能被那些操縱查詢字符串的「破解」)並將其安全地發佈到後端以供使用在我的後端php代碼中。我最關心的是撇號和引號,我該如何處理它們?

回答

0

根據jQuery的文檔的負荷()你會得到一個變量作爲POST:如果數據被作爲一個對象提供用於

POST方法;否則,假設爲 GET。

所以你應該把它當作一個普通的POST。

如果您在查詢中使用變量,例如您將使用mysql_escape_string()來防止MySQL注入。

+0

但這不是一個正常的POST,對吧?如果用戶在查詢字符串中有引號,那麼JSON數據字符串會被破壞:'code'「q」:「<?php echo $ this-> params ['url'] ['q'];?> – ews2001 2012-03-30 17:20:58

+0

所以你的問題實際上是如何安全地將用戶生成的字符串實現爲JSON對象?我認爲addslashes()就足夠了。 – rednaw 2012-04-03 09:51:23

+0

我結束了使用addslashes(),它似乎按預期工作。 – ews2001 2012-08-13 22:22:05

1

最好的辦法是刪除任何你知道不允許的字符,你可以用preg_replace來完成。如果你不能這樣做htmlspecialchars()htmlentities()將工作。

當然,在您搜索數據庫之前會轉義數據。