5

以下のコードを使用して、ページネーションを制御しています。使用して$_SERVER['PHP_SELF']いるので、この方法で安全かどうか、または安全にするために何をする必要があるかを知りたいと思いました$_SERVER['PHP_SELF']

<?php 

    if($rows > 10) {
        echo '<a id=nex href="'.$_SERVER['PHP_SELF'].'?pg='.($startrow+10).'">
        Next</a>';
    } 

    $prev = $startrow - 10;

    if ($prev >= 0) {
        echo '<a id=pex href="'.$_SERVER['PHP_SELF'].'?pg='.$prev.'">
        Previous</a>';
    }

?>
4

3 に答える 3

10

使用する必要があります:http filter_input//php.net/filter_input

$phpSelf = filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_URL);

次に、$phpSelfの代わりにを使用し$_SERVER['PHP_SELF']ます。

これはよりも優れてhtmlspecialcharsいますが、理想的な解決策はhttp://htmlpurifier.org/のようなツールを使用することです。

于 2012-04-22T21:38:25.553 に答える
9

XSS攻撃を防ぐには、htmlspecialchars()またはfilter_input()を使用してエスケープする必要があります$_SERVER['PHP_SELF']。詳細については、この質問を参照してください。

hrefまた、パスを使用して属性を開始した場合、?パスを使用せずに属性を開始すると、相対リンクが同じディレクトリに追加されるのと同じように、ブラウザは後続のクエリ文字列を現在のリクエストに追加します。

私はあなたが消毒していると思い$prevます$startrow。数学的比較はそれらを安全にするはずですが、それらが$ _GETからのものであるintval()場合は、他のことをする前にそれらを実行することをお勧めします。

于 2012-04-22T21:41:46.820 に答える
0

$_SERVER['PHP_SELF']投稿したいHTML構文に変更を加えることができる文字はないという意味で、はすでに安全です。唯一のものはファイル名自体です。

通常htmlspecialchars、ブラウザに投稿する前に、出力をサニタイズするなどの方法を使用する必要があります。

于 2012-04-22T21:34:33.360 に答える