pdo - mysql 简单注入疑问
迷茫
迷茫 2017-04-17 15:28:49
0
3
785


mysql数据库表user结构如图,php版本5.4.31

$uid="1'; select * FROM user;";

直接用:

$result=mysql_query("select * from user where uid='$uid' ");

mysql_error()显示

`You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * FROM user;'' at line 1`

和用pdo查询:

$sql="select * from user where uid='$uid' ";
$res=$pdo->query($sql);

显示$res是空

请问大神我构造的mysql注入语句是不是有错...
我主要目的是想测试不同的mysql注入语句,pdo_mysql的防护性

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(3)
大家讲道理

$uid="1'; select * FROM user;";この種のステートメントは実際にはテストとは何の関係もありませんが、
mysql_query("select * from user where uid=1; select * from user") を直接テストできます。この件については詳しく調べていませんが、2 つのテストは同等であり、両方とも挿入されます。

インジェクションの問題の最も単純な例は $username = "It's test" ですが、これが実行されると "select * from user where username='It's test" になり、構文エラーが発生します。 PDO などは前処理によってこのような問題を防ぎます。たとえば、$pdo->query("select * from user where username=?", array("It's test")); はインジェクションを防ぐために適切にリダイレクトされます。ただし、例で $pdo->query($sql) を直接使用すると、保護メカニズムは効果を生成しません。

これは一般的な考え方ですので、ご自身で理解してください。

最近仕事がとても忙しくて、ほとんどのお誘いを無視しなければならなかったのですが、たまにいくつか返事をしただけで、あまり話す時間がなかったので、ごめんなさいとしか言​​えませんでした。

いいねを押す +0
迷茫

Mysql_query、結合された SQL ステートメントは不正です

リーリー

単一の ' を閉じる方法を見つけて、次のコードに変更します:

リーリー

PDO はクエリの次のステートメントを自動的にエスケープするため、空になります。

リーリー
いいねを押す +0
迷茫

私自身が問題を発見しました:

直接使用$uid= "888' or '2=2";

ユーザーテーブル全体の内容が公開されました

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート