ホームページ  >  記事  >  バックエンド開発  >  TP フレームワークを使用して SQL 攻撃インジェクションを模倣する

TP フレームワークを使用して SQL 攻撃インジェクションを模倣する

韦小宝
韦小宝オリジナル
2018-03-14 10:51:104102ブラウズ

ImitatesqlInject

SEO:

1、最適化されている場合、タイトル部分は当社のウェブサイトのキーワードを最適化するために使用されます

検索エンジンは、ウェブサイトの重みが高い場合、ユーザーがキーワードを検索するときに最初にあなたのウェブサイトを見ることになります

2、Riyuウェブサイト---をポイントします。英語の Web サイト。日本語の Web サイトが英語の Web サイトに投票したことを示します。英語の Web サイトに投票するほど、英語の Web サイトがより優れたものになります

SQLインジェクションを防ぐ:

1

。 、ユーザーログインフォームを作成します

select()

はすべてのレコードをクエリします

find()

は1つのレコードのみをクエリします

簡単なユーザー名を書き込みます 検証のために、

'or 1 or'を書き込みますユーザー名フォームでは、ユーザー名が正しいことを示すプロンプトも表示されます。

質問: 検証せずに成功したのはなぜですか?

echo $model->getLastsql();//sqlステートメントを出力します

クエリの実行後、sqlステートメントの結果が次のようになったことがわかりました挿入された理由は一重引用符

であるため:

1phpマジッククォートを介して、ユーザーが入力したデータをエスケープします php

低バージョンではデフォルトが有効になっており、php.ini

にユーザーが入力したデータが自動的にエスケープされますが、これを

Magic_quotes_gpc=On

に変更することで回避できます。正しい

2、ユーザーによって送信されたデータをエスケープしますphp

addslashes()

関数を呼び出します

$username=addslashes($_POST['username ' ] );addslashes関数を使用して3を処理し、thinkphp

システム変数

を使用して外部データを取得します $this->_server

thinkphp

システム定数 (4 )

$this->_post('ユーザー名','addslashes');

4 配列として使用しますtpフレーム内 where条件

5では、

$list=$model->where('user_name="'.$username.'"およびdept_id ="'.$password.'"')->select();ログインは成功しません

例:

//仿sql注入
public function login(){
 $this->display();
 }
public function verify(){
 //用户名'or 1 or'登录会提示登录成功,是不正确的
 //方法1修改ini.php
 $username=$_POST['username'];
 $password=$_POST['password'];
 //方法2
 /*$username=addslashes($_POST['username']);
 $password=$_POST['password'];
 //方法3
 $this->_post('username','addslashes');
 $password=$_POST['password'];
 //方法4数组
 $cond['user_name']=$username;
 $cond['dept_id']=$password;
 $list=$model->where($cond)->find();*/
 
 $model=M('User');
 //方法5
    // $list=$model->where('user_name="'.$username.'" and dept_id="'.$password.'"')->select();
  $list=$model->where("user_name='$username' and dept_id='$password'")->select();
  echo $model->getLastsql();//打印出sql语句
  if($list){
   echo '登录成功';
   }else{
    echo '登录失败';
    }
   
 }

tpl:

<form action="URL/verify" method="post">
用户名:<input type="text" name="username">
密码:<input type="text" name="password">
<input type="submit" value="提交">
</form>

上記は、thinkphp がこれを防ぐ方法です。 SQL 攻撃を挿入する方法は複数あります。それを書き留めて練習してみてください。

関連する推奨事項:

SQL インジェクションを防ぐ PHP メソッドの例

以上がTP フレームワークを使用して SQL 攻撃インジェクションを模倣するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。