Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AJAX、PHP、JSON&;查询字符串:如何安全有效地传递变量?_Php_Ajax_Json_Query String - Fatal编程技术网

AJAX、PHP、JSON&;查询字符串:如何安全有效地传递变量?

AJAX、PHP、JSON&;查询字符串:如何安全有效地传递变量?,php,ajax,json,query-string,Php,Ajax,Json,Query String,我有一个搜索页面(search.php),它调用AJAX加载并将结果加载到#myresults DIV: $('#myresults').load('results.php', {"q":"<?php echo urlencode($this->params['url']['q']); ?>","min":<?php echo urlencode($this->params['url']['min']); ?>,max:<?php echo urlenc

我有一个搜索页面(search.php),它调用AJAX加载并将结果加载到#myresults DIV:

$('#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']); ?>});
results.php如下所示:

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

我正在抓取querystring值,然后将它们发布到结果页面。需要URLEncode还是应该使用htmlspecialchars()?我看过JSON.stringify(),但我不确定如何“最佳”编码我的数据(这样它就不会被那些操纵querystring的人“破坏”)并将其安全地发布到后端,以便在后端php代码中使用。我最关心的是撇号和引号,我如何处理它们?

最好的办法是删除您知道不允许使用的任何字符,您可以使用
preg\u replace
。如果您不能做到这一点,
htmlspecialchars()
htmlentities()
将起作用


当然,在搜索数据库之前要先转义数据。

根据jQuery文档load(),您将获得POST中的变量:

如果数据作为对象提供,则使用POST方法;否则,, 得到是假定的

所以你应该把它当作一个普通的帖子


例如,如果在查询中使用变量,则可以使用mysql\u escape\u string()来防止mysql注入。

但这不是一篇普通的文章,对吗?如果用户在querystring?中有引号,那么JSON数据字符串会被破坏:
code
“q”:“那么您的问题实际上是如何将用户生成的字符串安全地实现到JSON对象中?我认为addslashes()就足够了。我最终使用了addslashes(),它似乎按照预期工作。
if (isset($data['q']) && isset($data['min']) && isset($data['max'])) {
 $q = urldecode($data['q']);
 $min = urldecode($data['min']);
 $max = urldecode($data['max']);
}