我的头脑正在爆炸,我正在寻找一个简洁的步骤,以便在输出到其他用户的浏览器之前转发用户提交的数据。
过程: 1)用户1提交带有文本字段的ajax表单(jquery),作为JSON发送。 2)PHP使用mysqli_real_escape_string()转义字符串并将其放入数据库中。 3)用户2加载一个页面,该页面通过jquery ajax请求请求数据,作为JSON接收。该字符串在表单的选择框中显示为选项。
我想确保用户1无法提交恶意javascript或html - 换句话说,我希望所有字符都能正确转义。我想了解实现这一目标的步骤,需要在下面的代码中进行哪些更改?
提交表格时:(没有逃脱)
$.ajax({
url: '/ajax/insert.php', dataType: 'json',
data: {str: $("input").val()}, success: function(){}
)};
PHP插入DB :(转义)
mysqli_query(
"insert into tbl (str) values ('"
.mysqli_real_escape_string($link, $_REQUEST['str'])
."')");
JQuery获取字符串,放入下拉(简化)(放在这里转义?):
$.ajax({
url: '/ajax/get.php', dataType: 'json',
data: {},
success: function(json){
$("select").html("<option>" + json.str + "</option>");
}
});
用于从DB中检索的PHP(放在这里转义?):
$res = mysqli_query($link, "select str from tbl where X");
echo json_encode(mysqli_fetch_assoc($res));
由于
答案 0 :(得分:2)
我决定这样做:
$.ajax({
url: '/ajax/get.php', dataType: 'json',
data: {},
success: function(json){
var options = $("select");
options.html("");
$.each(json, function(i, v){
options.append($("<option />").val(v.item_id).text(v.str));
});
}
});
答案 1 :(得分:1)
另一种选择:
将新数据插入数据库时,请使用过滤,例如:
/**
* "Clean" posted vars from special characters with ENT_QUOTES
*/
function filter_spec($str_filter_value)
{
if(!is_array($str_filter_value))
{
$str_filter_value = htmlspecialchars($str_filter_value, ENT_QUOTES);
$str_filter_value = addslashes($str_filter_value);
return $str_filter_value;
}
}
/**
* Decode special characters in string encoded with filter_spec() (htmlspecialchars())
* WARNING: If $safe = false This will decode all special characters to normal state
* THE SAFE WAY: $safe = true will return the output in safe way. Default option is $safe=true.
*/
function filter_spec_decode($str_filter_value, $safe=true)
{
if(!is_array($str_filter_value))
{
if($safe == true)
{$str_filter_value = str_replace('&', '&', $str_filter_value);}
elseif ($safe == false)
{$str_filter_value = htmlspecialchars_decode($str_filter_value, ENT_QUOTES);}
$str_filter_value = stripslashes($str_filter_value);
return stripslashes($str_filter_value);
}
}
您的INSERT字符串更新应为:
$strToInsert = filter_spec($_REQUEST['str']);
您的数据库输出代码应为:
$strFromDB = filter_spec_decode($res['str']); // This is with safe enabled
希望这有帮助!