私のサーバーに入るAJAXリクエスト入力を全面的にサニタイズできる関数を作成しようとしています。ここまでで私はこれを作成しました:Previous JSON解決策が検出されない
function sanitize($variable) {
switch(gettype($variable)) {
case "string":
////
$variable = trim($variable);
$variable = stripslashes($variable);
$variable = htmlspecialchars($variable);
break;
case "array":
foreach($variable as $key => $property) {
$variable[$key] = sanitize($property);
}
break;
case "object":
foreach($variable as $key => $property) {
$variable->$key = sanitize($property);
}
break;
}
return $variable;
}
これは、通過できるネストされた配列、オブジェクト、および文字列を完全に消毒するために素晴らしい機能を果たします。しかし、コメントアウトされた行にJSON解析サポートを追加したいので、私は解決策をインターネットに持ってきました。
$unstrung = json_decode($variable);
if(is_object($unstrung)) sanitize($unstrung);
$unstrung = json_decode($variable);
if(json_last_error() == JSON_ERROR_NONE) sanitize($unstrung);
if(!is_array(json_decode($variable, true))) sanitize(json_decode($variable));
しかし、これらのそれぞれが、特定の状況では、文字列内の引用をコードする文字を終わった:私は、コメント行の代わりにこれら三つの提案されたソリューションのそれぞれを試してみました。例えば、同じようにコード化されたデータをJSON.stringify(["data"])
に送信し、私のサーバがこの関数を使用してそれを消毒し、直ちに吐き出すと、"["data"]"
のような応答が得られます。なぜ私はこれを取得していますか?
なぜこれをやっていますか?最終目標は何ですか? – c69
私の衛生機能がJSONを認識して解析し、その結果をサニタイズできるようにしたい。このサポートを私の関数に追加しようとすると、私の投稿の最後に記載されているように、いくつかの文字列がどのように処理されているかが分かりませんでした。 –
..安全でないHTMLのキーと値をサニタイズしたいのですか? – c69