1

私が持っている Web スクリプトで特殊文字に問題があり、コマンドを実行してユーザー名をゲーム サーバーに送信し、投票に対して報酬を与えています。

<form action="index.php" method="GET"> <input type="submit" value="Submit" /> </form>

それは正しい情報の特殊文字とすべてでデータベースに送信されますが、私のゲームサーバーに対して実行されると、特殊文字が無効になり、名前 Testusername/ または Testusername// を使用して悪用され、毎日複数の報酬を受け取ることができます.

非表示の型を使用してみましたが、システムが POST で動作しません。

何か案は?私は無力です。

編集*

0-9 _ az 文字は、!@#$%^&*()_+[}{} などの特殊文字を使用できます。エスケープ文字列を使用していますが、SQL インジェクションについては心配していません。それらはすべて失敗しました。私はmySQLを使用していますが、報酬をログとして送信したり、過去24時間投票していないユーザーを確認したり、再度投票したりしないようにするためではありません。基本的に、彼らはユーザー名 Test で投票し、報酬を受け取り、ユーザー名 Test/ で投票すると、Test がゲーム内で再度投票し、x2 の報酬を受け取ると表示されます。

4

4 に答える 4

2

シンプルpreg_replaceにそれを行う必要があります:

$username = preg_replace('#[^a-z0-9_]#', '', $username);

これはすべてを取り除きます:

  • 小文字の英字
  • 0 から 9 までの数字
  • 下線

大文字で問題ない場合はA-Z、正規表現に追加するかstrtolower()、事前に入力してください。これは、入力を保存する前、または他のサーバーに送信する前に行ってください。

ゲームサーバーに関する正確なジレンマについては少しわかりませんが、理想的には、他のサーバーから応答を取得して、保存する前に実際に入力されたユーザー名を確認する必要があり、フィルターする必要はまったくありません他のサーバーからフィルタリングされた値を取得するためです。

于 2012-07-16T18:15:26.500 に答える
0

スラッシュのみを置き換えたいので、これを使用できます。

<?php 
$user = $_GET["user"];
$user = str_replace("/", "", $user);
?>

これは、私の前の別の投稿のより効率的なバージョンです。

<?php 
$user = $_GET["user"];
$special = array('@', '!', '#'); 
$user = str_replace($special, "", $user);
?>
于 2012-07-16T18:18:58.340 に答える
0

以下を特殊文字を隠すために置き換えることができます

$formdesc = htmlentities($_POST['formdesc'], ENT_QUOTES, 'UTF-8');

これがあなたに役立つことを願っています

于 2012-07-16T18:23:30.923 に答える
0

このようなものはうまくいくはずです..bad_chars配列にすべての悪い文字を入力するだけです...

array $bad_chars = array('@', '!', '#'); // setup your chars to filter out

for($i = 0; $i < size_of($bad_chars); $i++) // iterate through them all
{
     str_replace($bad_chars[i], '', $_GET['string_to_be_filtered']); // replace all
}
于 2012-07-16T18:11:31.480 に答える