0

私は PHP 5.3.6 を使用しており、HTML エンティティを使用して POST データをエンコードしています。ただし、括弧と % は、同等のエンティティにエンコードされていません。

Web セキュリティ チームから、これらの文字は XSS 攻撃で使用される可能性があるため、エンコードする必要があると言われました。

掲載データ:

paren ( ) & % won't encode

htmlentities($_POST['first_name'], ENT_QUOTES, "UTF-8");

出力:

paren ( ) & % won't encode

ご覧のとおり ( ) % は変更されていません。

前もって感謝します。

-編集-これは、私が最終的に使用したもので、仕事をしました。ありがとう。

function stripcustomchars($encode_chars) {  
    $searches = array('%','(',')');  
    $replacements = array("%","(",")");  
    $encoded = str_replace($searches, $replacements,$encode_chars);  
    return $encoded;
}
4

2 に答える 2

1

Web セキュリティ チームから、これらの文字は XSS 攻撃で使用される可能性があるため、エンコードする必要があると言われました。

<データを HTML に (たとえば JavaScript ではなく) 挿入する場合、 、>&"および以外には当てはまりません'(それらでさえやり過ぎかもしれませんが、コンテキストによって異なります)。htmlspecialcharsほとんどの場合、これで十分です (ただし、古い IE とその UTF-7 エクスプロイトには注意してください)。

HTML 以外 (URI や JavaScript など) にデータを挿入する場合は、HTML 用ではなく、ターゲット言語用のエンコード ルーチンを使用する必要があります。(ただし、後で HTML エンコーディングを HTML に挿入する場合は、後で HTML エンコーディングを使用する必要があるかもしれません (たとえば、ユーザー データを JavaScript から HTML スクリプト要素に挿入するなど))。

于 2013-05-22T08:23:06.463 に答える
0

括弧とパーセント記号はHTML の特殊文字ではなく、特別な意味はありません。そのため、htmlentitiesそれらには触れません。それでもエンコードしたい場合は、手動で行う必要がありstr_replaceます。ただし、純粋な HTML コンテキストでこれを行うのは無意味です。

于 2013-05-22T08:21:17.257 に答える