Jquery Javascript/PHP/Ajax/Json:securing:在输出到浏览器之前转义用户提交的字符串

Jquery Javascript/PHP/Ajax/Json:securing:在输出到浏览器之前转义用户提交的字符串,jquery,escaping,Jquery,Escaping,我的脑袋都快炸开了,我正在寻找一个简洁的步骤,在输出到其他用户的浏览器之前,先转义用户提交的数据 过程: 1) 用户1提交一个带有文本字段的ajax表单(jquery),作为JSON发送。 2) PHP使用mysqli\u real\u escape\u string()将字符串转义并放入数据库中。 3) 用户2加载一个页面,该页面通过jquery ajax请求请求数据,并以JSON的形式接收。字符串作为选项显示在窗体的选择框中 我想确保用户1不能提交恶意javascript或html——换句话

我的脑袋都快炸开了,我正在寻找一个简洁的步骤,在输出到其他用户的浏览器之前,先转义用户提交的数据

过程: 1) 用户1提交一个带有文本字段的ajax表单(jquery),作为JSON发送。 2) PHP使用mysqli\u real\u escape\u string()将字符串转义并放入数据库中。 3) 用户2加载一个页面,该页面通过jquery ajax请求请求数据,并以JSON的形式接收。字符串作为选项显示在窗体的选择框中

我想确保用户1不能提交恶意javascript或html——换句话说,我希望所有字符都能正确转义。我想了解实现这一点的步骤指南,下面的代码中需要更改哪些内容

提交表格时:(不得转义)

PHP插入数据库:(转义)

JQuery获取字符串,放入下拉列表(简化)(放在这里?):

谢谢

另一个选择:

将新数据插入数据库时,请使用筛选,例如:

    /**
     * "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);
    }
}
您的插入字符串更新应该是:

$strToInsert = filter_spec($_REQUEST['str']);
$strFromDB = filter_spec_decode($res['str']); // This is with safe enabled
数据库的输出代码应为:

$strToInsert = filter_spec($_REQUEST['str']);
$strFromDB = filter_spec_decode($res['str']); // This is with safe enabled

希望这有帮助

我决定这样做:

$.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));
        });
    }
});
$.ajax({
url:'/ajax/get.php',数据类型:'json',
数据:{},
成功:函数(json){
var选项=$(“选择”);
options.html(“”);
$.each(json,函数(i,v){
options.append($(“”).val(v.item_id).text(v.str));
});
}
});

mysqli\u real\u escape\u字符串必须完成所有转义,谢谢-当特殊字符插入select的html时,使用javascript转义不是更合适吗?不建议使用javascript转义。用户可以绕过客户端的javascript转义函数。而服务器端更安全,客户端无法操纵。
$strFromDB = filter_spec_decode($res['str']); // This is with safe enabled
$.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));
        });
    }
});