私は、通常のデータベースに対処していない(私は私と私の友人のために書いたWebアプリケーションのためのいくつかの小さなものを管理している)だから、私はすべてが私の質問をする前に、どのように動作するかを理解していることを確認するつもりです。アプリケーションでSQL入力が必要で、SQLで処理されないのはなぜですか?
SQLはデータベースを「処理する」プログラムです。それはすべてのテーブルとスキームとリンクを管理し、受け取るコマンドに応じてほとんどすべてを行います。これらのコマンドを手作業で入力するか、コマンドを記述したスクリプトを作成するか、別のプログラムからSQLにこれらのコマンドを送信させることもできますが、コマンドは実際には変更されていません。 Webアプリケーションは、ユーザから受け取った入力を受け取り、それを最初にクリーンアップせずにSQLに送るときに
SQLインジェクションが発生します。もしエンドユーザが十分に綿密であれば、SQLはそれがどこかのテーブルに格納されていると見なされていたコマンドを見ることになり、その結果、厄介なものになります。
典型的なSQLインジェクションの防止は、データの代わりに、SQLコマンドが送信されたと思わせるであろう任意の文字を除去、つまり、ユーザーの入力を消毒することを伴います。
今
、私の質問:
なぜSQLが私たちのためにこれを処理しないのですか?なぜ、各コマンドでSQLが最初と最後を見ず、間にあるものを無視しないのですか(私は "標準のSQLコマンド構文の一部ではないと思います。しかし、もしそうでなければ変更が起こる可能性があります)もちろん、(2番目/ 3番目のコマンドは無視されるので)同時に複数のコマンドを送信することはできませんが、 "私は一度に1つのコマンドを送信します"エンドユーザがプルしようとする可能性のある偽りを無視します。
私は他の誰かがこの考えています確信している、といくつかの理由または別のために働いていないとして、それを却下しました。しかし、私は理由を理解するのに十分ではない、と私はしたいと思います。構造化照会言語:「SQL」はプログラムではありませんので、
「私はデータベースについては何も知らない」と言っていますが、「これは間違っていると思います。 – JNK
SQLは、プログラムではなく、データ(構造化照会言語)を照会するための言語です。あなたは、データベースエンジンやOracle、SQL Server、MySQLなどのRDBMS(リレーショナルデータベース管理システム)を考えています – Lamak
これは、 '' joe 'とlastname =' doe''文を ' WHERE name = 'joe' AND lastname = 'doe''式を1つの演算子として使用しますか? –