SQLインジェクションとXSS、CSRF

SQLインジェクション

SQLインジェクションとは、MySQLの仕組みを利用することで、本来意図しないSQL文が実行されてしまう脆弱性のこと

脆弱性の例

SELECT * FROM user_info WHERE name = '$username' AND password = '$userpass';

のようにSQL文を処理していた場合、

SELECT * FROM user_info WHERE name = 'user1' AND password = '' OR 'A' = 'A';

のようにすると、SQLの仕組みを利用することでWHERE句に”とすることで一度実行を終了させることができる この仕組みを利用してパスワードが分からなくてもアクセスすることが出来てしまう

解決方法

データベースが変わったとしても、ソースコードレベルでの変更点は出さないようにするPDOを行う

SELECT * FROM user_info WHERE name = '$username' AND password = '$userpass';

の入力される値を

$sql = "SELECT * FROM user_info WHERE name=? AND password=?";
$stmt->execute(array($username,$password));

のように一度変数に置き換えて一つの塊に置き換えることでクォーテーションを認識されることがないようにする ?記号のことをプレースホルダという

XSS

XSSはCross Site Scriptingの略であり、他人のWebサイトへ悪意のあるスクリプトを埋め込むこと

<script>alert('XSS');</script>

のように埋め込むことで他人に被害を与えてしまう 悪意のある人間ならば、scriptタグの中にCookie情報を抜き出したり、悪いサイトに遷移させることができてしまう

CSRF

CSRFはクリックすると意図してないことが悪意ある人間によって実行してしまうこと