どのようにSQLインジェクション攻撃/脆弱性?
このFAQに答えるk4thrynによって書かれました:
は、 SQLインジェクションの脆弱性の悪いときに書かれたプログラムを使用する場合に発生することができますユーザは最初に入力を検証せずに、データベースクエリのデータを提供します。 これは最も頻繁に動的なコンテンツをWebページ内で発見されています。 フル開示が別のアプリケーションのためのWebサイトから、このテーマに関する記事をいくつかの優れたチュートリアル、わかりやすいだけでなく、多くの脆弱性が投稿されています。
SQLインジェクションの簡単な例では、ユーザー名とパスワードを提供する基本的なHTMLフォームログイン名です:
method="post" <form action="process_login.php"> <input type="text" name="username"> <input type="password" name="password"> < /フォーム>
このHTMLのスニペットを考えると、 1つの仕事に" process_login.php "でビルドして、データベースクエリを実行されるスクリプトには、簡単な(そして最悪の)手段を推測することができますは、このようになります:
" IDを選択 からログイン のWHERE =ユーザ名' $ユーザ名' とパスワード= ' $パスワード' " ;
こうした状況下で、場合は、変数" $ユーザ名"と" $パスワード"は、ユーザの入力から直接、ログインスクリプトを簡単に有効なパスワードは、 SQLステートメントの構文が提供されていると一緒に遊んでだまされることができると信じています。 次の文字列をパスワードとして提供されたと仮定:
'または'' = '
して、ユーザー名として"ボブ"を与えた。 一度の変数は、上記のクエリは次のようになる補間されます:
" IDを選択 からログイン ここで、ユーザー= ' Bob 'を とパスワード= ''または'' = '' " ;
このクエリは、行が返されますので、最終的な句:
... または'' = ''
常にtrueに評価されます(空の文字列には、常に空の文字列に)同じです。
SQLインジェクション攻撃を防止する
最も一般的な方法vunerability 、この種のSQLインジェクションを防ぐために単一引用符のような危険な文字については、ユーザの入力をチェックしているとは何を期待する前に、すべてのユーザーのデータを提供したデータベースを伝える準備されたステートメントを使用して、それに渡されます。
|
脆弱性管理ダミーの
最新のブログの投稿
- 乾燥方法は 、 携帯電話を連絡先に水で 、 是非のに






