AJAX、PHP、JSON&;查询字符串:如何安全有效地传递变量?
我有一个搜索页面(search.php),它调用AJAX加载并将结果加载到#myresults DIV: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
$('#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']);
}