0

私は Web プログラミングに非常に慣れていないため、基本的にはオンラインでドキュメントを検索することから学びます。私は、インベントリなどを含むゲームの種類を実行している Web サイトを持っています。ユーザーにアイテムを渡すきれいな方法が思い浮かびません。現在は JavaScript 関数を使用していますが、ユーザーは URL バーから関数を呼び出すだけでシステムを悪用できることに気付きました。

特定のページで、これは特定のアイテムを呼び出すコードです。ユーザーが「Get Hat」ボタンなどのボタンをクリックすると、別のページにリダイレクトされます。

<script>
    function giveitem(name, quant)
    {
        document.getElementById("itemnamefield").value=name;
        document.getElementById("itemquantfield").value=quant;
        document.itemform.submit();
    }
</script>
<form id="itemform" name="itemform" action="./itemget.php" method="post">
    <input type="hidden" id="itemnamefield" name="itemnamefield" value="">
    <input type="hidden" id="itemquantfield" name="itemquantfield" value="">
</form>    
<input type="button" onClick="javscript: giveitem('Hat',1);" value="Get Hat"><br>

itemget.php は、前のページの投稿データを使用してこの関数を実行します。$id は Cookie に保存されたユーザーの ID 番号、$name はアイテムのタイトル、$quant はアイテムの希望数量です。

function additem($id, $name, $quant){
        include 'sqlconnect.php';
        $result = mysqli_query($con, "SELECT * FROM inventory WHERE id='$id' AND name='$name'");
        if ($row = mysqli_fetch_array($result)){
            mysqli_query($con, "UPDATE inventory SET quant=quant+'$quant' WHERE id='$id' AND name='$name'");
        }
        else{
            $subresult = mysqli_query($con, "SELECT name FROM itemdef WHERE name='$name'");
            $subrow = mysqli_fetch_array($subresult);
            mysqli_query($con,"INSERT INTO inventory (id, quant, name) VALUES ('$id', '$quant', '$subrow[name]')");
        }
    }

itemget.php は、ユーザーが受け取ったアイテムを表示します。悪用可能であるため、JavaScriptは使用できません。私は jquery や、標準の HTML と PHP 以外のものを使用するつもりはありません (私は経験が浅いので、単純にしようとしています)。「xアイテムを与える」ボタンごとに新しいフォームを作成する唯一の方法はありますか?

4

3 に答える 3

0

JavaScript、フォーム、または単純なハイパーリンクのみを使用できます。

秘訣は、ユーザーがどの可能性を持っているかをサーバーに知らせることです。そのため、ページを生成するときに、「get hat」リンクを生成したサーバー上のユーザーのセッションに保存できるため、「get hat」は有効なコマンドです。

無効なコマンドを受け取った場合、ユーザーは不正行為を行っているか、[戻る] をクリックして古いページからコマンドを実行した可能性があります。とにかく、コマンドを無視するか、代わりにメッセージを表示できます。

したがって、トリックはサーバー上で検証を維持することです。そうすれば、あなたが提供したコマンド以外はすべてブロックされるため、不正行為を行うことはできません。

つまり、ゲーム ロジックとセッション処理を PHP で記述し、プレーンな HTML (ハイパーリンク) を使用してコマンドをレンダリングするだけです。必要に応じて、Javascript/JQuery またはフォームを使用することもできます。その方が簡単であるか、ゲームプレイが改善されると思われます。サーバーでチェックを行う限り、問題ないはずです。

于 2013-07-14T22:18:57.343 に答える
0

小さな例。情報をさらに処理するために.phpファイルにデータを送信すると、常に、つまり常にパニックになり(悪いパニックとは異なりますが、注意してください)、ユーザー情報を信頼しないでください。変数 $x が整数のみであると想定されていることがわかっている場合は、if 条件を使用して整数であることを確認し、悪質なデータや悪意のあるデータが問題にならないようにします。

于 2013-07-14T22:25:57.230 に答える