2

自分のphp登録スクリプトを最初から書き終えたところです。これは初めてなので、使用しているメソッドがSQLインジェクションから安全かどうかを確認したいと思います。

これは、SQLデータベースとデータを交換する方法の例です。

public function StoreUser($name, $email, $password, $devid) {

    $mysqli = new mysqli("host", "user", "pass", "data");
    if ($mysqli->connect_errno) {
        echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    }

    $unique_id = uniqid('', true);
    $hash = $this->hashSSHA($password);

    $add_user = $mysqli->prepare("INSERT INTO `users` SET `unique_id`=?, `name`=?, `email`=?, `encrypted_password`=?, `salt`=?, `devid`=?, `created_at`=?");
    $add_user->bind_param("sssssss",$unique_id,$name,$email,$hash["encrypted"],$hash["salt"],$devid,date("H:i:s"));
    if ($add_user->execute()) {
        $add_user->close();
        $mysqli->close();
        return true;
    } 
    else {
        $add_user->close();
        $mysqli->close();
        return false;
    }

}
4

2 に答える 2

5

はい、安全です。

データをコマンドから基本的に分離するパラメーター化されたクエリを使用しているため、一次SQLインジェクション攻撃から安全になります。

于 2012-12-07T04:00:57.567 に答える
2

適切なSQLプレースホルダーを使用することは、アプリケーションを安全にするための重要な最初のステップです。この場合、SQLインジェクションのバグについて心配する必要はありません。ユーザーが提供するすべてデータにプレースホルダーを使用するように訓練されている場合は、エスケープを行う必要がありますが、他の問題が発生する可能性があります。

SQLステートメントのために物事をエスケープするのと同じように、HTMLとして表示する前に、ユーザーが提供したデータをエスケープすることに注意を払う必要があります。そうしないと、あらゆる種類の問題が発生する可能性があります。最悪の場合はXSSです。

いずれにせよ、PDOを使用するとエスケープがはるかに簡単になります。mysqli通常、PDOが使用できない場合にのみ使用されます。

特別な特効薬はありませんが、アプリケーションが悪用されたり、厄介なバグに悩まされたりするのを防ぐためにできることはたくさんあります。ただし、フレームワークを使用する代わりに、独自の低レベルのデータベースインターフェイスコードを作成している場合、これを行うのは難しい場合があります。あなたは車輪の再発明に多くの時間を費やすでしょう。

于 2012-12-07T04:04:35.440 に答える