1

私の質問は、SQL インジェクションを行おうとしている人にとって可能な限り最も迷惑になる方法です。

事前にご協力いただきありがとうございます。私はMySQLを学ぼうとしています。練習用にデータベースをセットアップするつもりでしたが、ここで例を読んだり探したりしていましたが、SQL インジェクションをどこで取得するかについて人々が言っ​​ているのを何度も目にしました。

私はこれについてしばらく読んでいますが、読めば読むほど混乱しています。これを防ぐために PDO を使用することにしました。私が読んだことから、それを安全にするのは準備されたステートメントであり、それでもホワイトリストに登録する必要があります。

私の質問は、誰かが私のような初心者に、これらの攻撃を阻止するのに非常に効果的に使用できるセットアップを提供できるかどうかです. 私が理解していることから、彼らを止めることはほとんど不可能に思えます。私は誰かが dns について何か言っているのを見ました。それが唯一の確実な方法です。今はあまりセキュリティを必要としないかもしれませんが、これを正しい方法で行うことを学びたいと思います。

私が間違っていなければ、PDO を使用していても、ブラインド インジェクションを使用できます。だったら、2~5秒くらいのディレイを入れようかなと。それがユーザー側に多すぎるかどうかはわかりません。私はただ学んでいるだけで、実際の経験はありません。

また、私がやろうとしていることのタイプは、おそらく今のところ非常に基本的なものになるでしょう...ママ&ポップタイプのもの. ユーザー名とパスワードを使用してサイトを構築した場合、これらの攻撃を受けてほしくありません。単に気に入らないだけです。したがって、少し遅いがより安全である場合は、少なくともそのオプションを提供できるようにしたいと思います. 私の考えは、彼らにとって本当に迷惑であり、うまくいけばそれだけの価値がないことです.

私が読んだところによると、テーブル名またはユーザー名の長さによって、6〜8文字ではなくフレーズを使用するなど、それらが難しくなる可能性があります。

また、最小特権も役立つと思いますが、すべてを回避する方法が常にあるようです。初心者で、自分が何をしているのか正確にわからない場合は、脆弱になります。

私はどこかからコードをコピーして自分のニーズに適応させようとしましたが、探しているものをまだまとめようとしておらず、まだ読んで学習している段階です。

<?php


require_once "dBug!.php";

$dsn = "mysql:host=";
$user_name = "";
$pass_word = "";

$connect = new PDO($dsn, $user_name, $pass_word);

$sql = "SELECT * FROM books WHERE id <= 10";   

$result = $connect->prepare($sql);

$status = $result->execute();


if (($status) && ($result->rowCount() > 0))
{
$results = array();


while ($row = $result->fetch(PDO::FETCH_ASSOC))
{
    $results[] = $row;
}


new dBug($results);

}

$connect = null;


?>
4

1 に答える 1

0

SQL インジェクション攻撃を阻止する最善の方法は、ストアド プロシージャを使用することです。これを機能させるには、ユーザー入力が SQL コードとして送信されるのではなく、サーバー上に既に存在する SQL ステートメント内の変数の値として送信されるように、ストアド プロシージャを記述する必要があります。

于 2013-09-16T02:12:54.013 に答える