2

私の頭はこれで爆発しています。他のユーザーのブラウザーに出力する前に、ユーザーが送信したデータをエスケープするための簡潔なステップバイステップを探しています。

プロセス: 1) ユーザー 1 は、JSON として送信されるテキスト フィールドを含む ajax フォーム (jquery) を送信します。2) PHP は文字列をエスケープし、mysqli_real_escape_string() を使用して DB に配置します。3) ユーザー 2 は、JSON として受信する jquery ajax リクエストを介してデータを要求するページを読み込みます。文字列は、フォームの選択ボックスのオプションとして表示されます。

ユーザー 1 が悪意のある JavaScript または html を送信できないようにしたい - つまり、すべての文字を適切にエスケープしたい。これを達成するための手順についてのガイダンスが欲しいのですが、以下のコードで何を変更する必要がありますか?

フォームの送信時: (エスケープなし)

$.ajax({
    url: '/ajax/insert.php', dataType: 'json',
    data: {str: $("input").val()}, success: function(){}
)};

DB への PHP の挿入: (エスケープ)

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));

ありがとう

4

2 に答える 2

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));
        });
    }
});
于 2012-09-27T04:13:43.690 に答える
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('&amp;', '&', $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']);

DBからの出力コードは次のようになります。

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

お役に立てれば!

于 2012-09-26T18:30:09.313 に答える