3

__construct()この方法でログインまたはサインアップクラスを呼び出すのは安全ですか:

function __construct(PDO $DBH, $_POST['1'], $_POST['2'])
{
    $this->_user=$_POST['1'];
    $this->_pass=$_POST['2'];
    $this->_DBH=$DBH;
}

後でこのクラス内でユーザー入力をサニタイズしたいのですが、生の POST 入力で構築されたクラスのために、私のコードが SQL インジェクションや XSS に適しているかどうかわかりません。

4

5 に答える 5

5

準備済みステートメントをサニタイズ/使用することがわかっている場合 (つまり、生の POST データがそのままクエリに挿入されない場合)、そうしても問題ありません。

実際、準備済みステートメントを使用する場合、入力をサニタイズする必要はまったくありません (SQL の場合、データを HTML として表示する場合でも、サニタイズする必要があります)。

于 2012-08-28T15:08:25.320 に答える
4

サニタイズされていないデータをある変数から別の変数にコピーしても、違いはありません。これは、SQL インジェクション / XSS の目的ではありません。

これらの変数が使用されているときに、適切なエスケープを適用する (または、エスケープしないことを避ける)ことです。SQL インジェクションのリスクは、準備されたステートメントを使用するだけで大​​幅に軽減されます。ただし、XSSを防ぐために出力をエスケープすることはまだ必要です:)

于 2012-08-28T15:12:56.517 に答える
1

私はいつもhtmlentities($value, ENT_QUOTES);、安全のために。

準備済みステートメントを使用し、ユーザー入力を決して信頼しないでください。

于 2012-08-28T15:10:42.650 に答える
1

これは、インジェクション攻撃について心配する必要がある場所ではありません。SQL インジェクションの防止は、一般にサニタイズ入力の量です。XSS 防止は、通常、さまざまな形式の出力エンコーディングに相当します。これらのいずれも、必ずしもデータの内部表現 (変数自体の値) に関連しているわけではありません。

他の人が述べたように、準備済みステートメント ( PDOおよびPDOStatement ) を使用すると、必要な SQL インジェクション エスケープが自動的に実行されます。ただし、最終的には、適切な変換はデータの使用方法によって異なるため、通常は使用時にこの軽減を行う必要があります

于 2012-08-28T15:11:08.327 に答える
1

ユーザー入力を解析しないことは決して良い考えではありません。ユーザーが何かを入力するたびに、入力をチェックする必要があります。

于 2012-08-28T15:09:51.073 に答える