1

フォームを含む PHP ページがあります。フォームがmethod="POST"あり、アクションは MySQL に値を挿入する別の PHP ファイルです。これはすべて正常に機能します。

私の問題は、情報をデータベースに送信する 2 番目の PHP ページに、情報が送信されるユーザー名、パスワード、データベース名、およびテーブル名が含まれていることです。誰かが独自の PHP または HTML フォームを作成し、MY 2 番目の PHP ファイルに POST して、データベースに任意の値を送信できるのではないかと心配しています。

ユーザー名、パスワード、データベース名、およびテーブル名を最初の PHP ページ (フォーム付き) に配置し、これらを変数として 2 番目の PHP フォームに渡したいので、他の誰かが独自のフォームを作成して投稿する脅威を排除します。(これが可能で正しい方法である場合、変数を渡す方法を提案できますか?)

これは、データベースへの入力を保護する適切な方法ですか?

4

4 に答える 4

1

サーバーをブラックボックスとして見てください。要求を受け入れ、それに応答します。Web サイトの場合、URL へのアクセス、リンクのクリック、またはフォームの送信が要求となります。サーバーはこれらのリクエストに対して何らかの処理を行い、新しい Web サイト、リダイレクト、ダウンロードするファイルなどで応答します。

HTML フォームは、実際には、ユーザーからデータを取得してリクエストにパッケージ化するためのインターフェイスにすぎません。重要なのは、HTML やその HTML を生成した PHP ではなく、ユーザーがフォームに入力したデータを含む結果としてサーバーに送信されるリクエストです。このようなリクエストは、HTML フォームがなくても簡単に生成できます。

Chrome/Safari の Web Inspector、Firefox の Firebug、または IE Developer Tools を使用し、そこにあるネットワーク インスペクション ツールを見て、すべてのリクエスト/レスポンスを確認し、それらの詳細を確認します。

リクエストに対して何らかの検証が必要な場合は、サーバーがそれを行う必要があります。検証を HTML フォームに依存することはできません。誰でもいつでもどこからでもデータをサーバーに送信できます。

于 2012-04-06T01:33:35.787 に答える
0

私はdeceze応答に同意します。いつでもキャプチャを使用できます。また、さらに、php2.php へのリクエストを$_SERVER['HTTP_REFERER']チェック ( HTTP_REFERER についてはこちらを参照) して、サーバーからではないすべてのリクエストをバイパスすることもできます。

于 2012-04-06T08:11:18.133 に答える
0

誰かが独自の PHP または HTML フォームを作成し、MY 2 番目の PHP ファイルに POST して、データベースに任意の値を送信できるのではないかと心配しています。

それは可能であり、わざわざ HTML ページを作成する必要さえありません。

これは、データベースへの入力を保護する適切な方法ですか?

これを行う正しい方法は、入力でテーブル名または列名 (または任意の SQL 識別子) を指定できないようにすることです。入力は、列の値または WHERE 句の比較で使用される値のみを指定する必要があります。

必要なクエリを列挙し、必要な特定のクエリをフォームで指定して、その特定のクエリに対して適切に認証されるようにする方法を考え出します。

アドホック レポートを実行しようとしている場合は、明示的にそのように設計してください。 Open Source & Free Adhoc / End User Reporting Toolは、PHP に対応しています。

「アドホック」レポート システムでは、ユーザー自身が特定のカスタマイズされたクエリを作成できます。

準備されたステートメントのような多くの SQL セキュリティのベスト プラクティスでは、テーブル名を使用したクエリのパラメーター化が許可されていないため、アドホック レポートを安全に実行するのは困難です

ユーザー名、パスワードなどを最初の PHP ページ (フォーム付き) に配置し、これらを変数として 2 番目の PHP フォームに渡したい

これを行っていることはあなたの質問からは明らかではありませんが、明確にするために、データベースのユーザー名とパスワードをエクスポートしたり、フォーム入力がデータベース接続構成に影響を与えたりすることを許可しないでください。これにより、攻撃者はより簡単に

  1. ファイアウォール内で低電力シェルを実行して、データベースの部分的な乗っ取りを行う機能を隠します。
  2. Web アクセスと時間だけを与えられたデータベースの管理者パスワードを総当たり攻撃し、SQL インジェクションの欠陥をデータベースの完全な乗っ取りに変えます。
于 2012-04-06T00:28:41.240 に答える
0

フォームにデータベース名とテーブル名を入れないでください。そこに意味のある値を入力し、サーバー側のコードで適切なテーブル名とデータベースを選択します。

たとえば、「bluepill」または「redpill」の値を取ることができる選択フィールドを追加します。POST データを受信したら、bluepill にはテーブル「good_users」を、redpill には「evil_users」を選択します。

フォームが登録フォームの場合は、メール リンク、キャプチャなど、ユーザーを確認する他の方法を考えることができます。

于 2012-04-06T00:31:47.953 に答える