-1

これは非常に単純な質問かもしれませんが、ここで何が間違っているのかわかりません...

わかりやすく説明するために、以下に本当に簡単な例を示します。

<ul>
    <li><a href="test.php?link1=true">Link 1</a></li>
    <li><a href="test.php?link2=true">Link 2</a></li>
    <li><a href="test.php?link3=true">Link 3</a></li>
</ul>

<?php 
    if(isset($_GET['link1'])) {
        if(($_GET['link1']) == 'true') {
            echo 'This Is Link 1';
        }
    }

    if(isset($_GET['link2'])) {
        if(($_GET['link2']) == 'true') {
            echo 'This Is Link 2';
        }
    }

    if(isset($_GET['link3'])) {
        if(($_GET['link3']) == 'true') {
            echo 'This Is Link 3';
        }
    }
?>

これは test.php ページです。ここでは、$_GET に 3 つの異なる引数を設定し、それに応じてコンテンツを表示しました。すべてが完璧に機能するようになりました。理解していないのは、この種の URL をブロックする方法だけです。

ユーザーがリンク 1 をクリックすると、URL は次のようになります。

http://localhost/test.php?link1=true

そして、この URL の出力はThis is Link 1 です。

このURLを次のように変更すると:

http://localhost/test.php?link3=true&link2=true&link1=true

そして、私が得た出力は、This Is Link 1This Is Link 2This Is Link 3 です。

ここではこれで問題ありませんが、誰かがこれを入力してフォームが上下に表示されると非常に迷惑です。この改ざんを止める方法はありますか?

4

3 に答える 3

3

個別の if ステートメントの代わりに、elseif を使用します。そうすれば、実行されるのは 1 つだけです (最初に真であることが判明した条件)。

<?php 
if(isset($_GET['link1'])) {
    if(($_GET['link1']) == 'true') {
        echo 'This Is Link 1';
    }
} elseif(isset($_GET['link2'])) {
    if(($_GET['link2']) == 'true') {
        echo 'This Is Link 2';
    }
} elseif(isset($_GET['link3'])) {
    if(($_GET['link3']) == 'true') {
        echo 'This Is Link 3';
    }
}
?>
于 2012-09-11T09:35:19.877 に答える
2

より堅牢な方法は、おそらく各リンクに同じパラメーター名を使用することですが、値を変更します。例えば

<a href="test.php?link=link1">Link 1</a>
<a href="test.php?link=link2">Link 2</a>
<a href="test.php?link=link3">Link 3</a>

このように、誰かがクエリ文字列に複数の値を指定した場合でも、そのうちの1つだけが使用されます。

于 2012-09-11T09:37:53.097 に答える
0

連続しifたステートメントを使用しているため、すべてのケースに対応でき、すべての出力をエコーできます。

if(isset($_GET['link3'])) {
    if(($_GET['link3']) == 'true') {
        echo 'This Is Link 3';
    }
}
// Nothing stops the next if working here.

代わりに switch ステートメントを調べて最初のステートメントをチェックするか、同じものを使用し?link=て各リンクで異なるデータを渡して、1 つのifステートメントのみを満たすことができます。

于 2012-09-11T09:36:31.780 に答える