我有一個調用一個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代碼中。我最關心的是撇號和引號,我該如何處理它們?
但這不是一個正常的POST,對吧?如果用戶在查詢字符串中有引號,那麼JSON數據字符串會被破壞:'code'「q」:「<?php echo $ this-> params ['url'] ['q'];?> – ews2001 2012-03-30 17:20:58
所以你的問題實際上是如何安全地將用戶生成的字符串實現爲JSON對象?我認爲addslashes()就足夠了。 – rednaw 2012-04-03 09:51:23
我結束了使用addslashes(),它似乎按預期工作。 – ews2001 2012-08-13 22:22:05