4

アップロード画像を保護する方法を知った後、不要なファイルをアップロードするためにフォーム入力フィールドをバイパスする方法を知った後、2 つのファイルを使用した別の例を挙げたいと思います。そのうちの 1 つが非表示になっています。

SQL テーブル(id、名前、jod、番号)

CREATE TABLE `users` (
  `id` bigint(20) unsigned NOT NULL auto_increment,
  `name` varchar(255) default '0',
  `job` varchar(255) default NULL,
  `number` varchar(255) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

フォームコード(サポート会員が独自に編集)

<form action="send.php" method="post" name="send" id="send">
 <input type="text" name="name" id="name" value="John"/>
 <input type="text" name="job" id="job" value="Plumber"/>
 <input type=hidden name="number" id="number" value="1234"/>
 <input type="Submit" name="Submit" value="Submit"/>
</form>

後で、サーバー側のバイパスチェックへのさまざまな入力をバイパスできるFirefox拡張機能があり、多くの損傷を引き起こす可能性があるため、ここでプロセス全体を停止し、更新numberを引き起こすなど、非表示のテーブルの値を任意に編集できるようにしますvalue="1"会員様向け情報ありますvalue number 1

ここに画像の説明を入力

その拡張機能は次のように機能します。サーバー側に渡される前に入力データを偽造できます。

ここに画像の説明を入力

PHP コード Send.php

if(isset($_POST['send'])){  

$name   = mysql_real_escape_string($_POST[name]);
$job    = mysql_real_escape_string($_POST[job]);
$number = mysql_real_escape_string($_POST[number]);

$sql= "update users SET name='$name',job='$job' WHERE number='$number'";
       mysql_query($sql) or die("query failed: $sql".mysql_error());

echo "Update Done";

} else { 
echo "Nothing to update";
}

質問 では、この単純なフォームをそのような入力フォームから保護するにはどうすればよいですか? 〜ありがとう

この問題は本当に痛いので、私のウェブサイトが自由にハッキングされるようになりました:)

4

4 に答える 4

2

あなたの原因でユーザー認証がオプションでない場合は、次の手法を試すことができます。

  • 他の情報でソルトされた数値のハッシュで非表示フィールドを設定します
  • 暗号化された番号で非表示フィールドを設定します (可能性のあるソルトはここでもセキュリティを向上させる可能性があります)

もちろん、フォーム HTML を送信して投稿情報を検証する際に追加の手順が追加されますが、少なくとも攻撃者が投稿で有効な番号を偽造することははるかに困難になります。非表示フィールド内のソルト化された情報が賢明に使用されない限り、攻撃者が別のユーザーの暗号化/ハッシュ化された番号を知っていても、あなたを救うことはできません.

于 2013-02-02T13:35:15.717 に答える
1

フォームと値を編集するユーザーがいる場合、この問題は発生します。より良いアプローチは、ユーザーを認証することです。アカウントでログインしたユーザーのみが、それぞれのアカウントを変更できるようにします。

また、mysql_query や mysql_* のようなものは使用しないでください。それらは安全ではなく、php5 では減価償却されています。

于 2013-02-02T13:31:10.563 に答える
1

ユーザーがサーバーに送信するデータを制御することはできません。

サーバー上で、ユーザーが情報を表示したり、要求している変更を行ったりする権限を持っているかどうかを確認する必要があります。

例えば:

非表示のテーブル番号の値を value="1" などの任意の値に編集できるため、メンバーの更新情報はその値番号 1 を持ちます。

プロセスは次のようになります。

  1. 誰でもこのフィールドを編集できますか? もしそうなら、OK。
  2. 認証されたユーザーからの要求ですか? そうでない場合は、エラー メッセージとログイン フォームを返します。
  3. ID=1 のユーザーからのリクエストですか? だったらOK
  4. 管理者権限を持つユーザーからのリクエストの場合は? だったらOK
  5. エラーメッセージを返します。
于 2013-02-02T13:29:20.290 に答える