最近SQLインジェクションについて知ったのですが、多くの人が使っているログイン機能は、ユーザーが同時に入力したユーザー名とパスワードをSQL文に組み込んで、そのクエリで結果があるかどうかでログインが可能かどうかを判定していることがわかりました。 。例:
<?php $username = $_POST['username']; $password = $_POST['password']; $sql = "select * from user where username='{$username}' and password='{$password}' "; $this->db->query($sql);
これは単なる例ですが、現在、多くのフレームワークで ' または 1=1 -- インジェクションを追加することができます。注意しないと、最終的に結合されたステートメントは次のようになります。ここでは、入力パラメータのフィルタリング、パラメータのバインド、構文分析、および SQL インジェクションに対処するその他の一般的な方法については説明しませんが、判断方法を変更できます:
<?php $username = $_POST['username']; $password = $_POST['password']; $sql = "select * from user where username='{$username}' "; $data = $this->db->query($sql); ...... if($data['password'] == $password){ //密码OK }else{ //密码错误 }
このように、まず、データを取得してからphpを使用します パスワードが一致するかどうかを判断することで問題は解決しますか?
関連する推奨事項:
以上がPHP および Mysql ログイン機能により SQL インジェクションが防止されるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。