検索

ホームページ  >  に質問  >  本文

pdo - mysql 简单注入疑问


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的防护性

迷茫迷茫2822日前789

全員に返信(3)返信します

  • 大家讲道理

    大家讲道理2017-04-17 15:30:49

    $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
  • 迷茫

    迷茫2017-04-17 15:30:49

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

    リーリー

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

    リーリー

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

    リーリー

    返事
    0
  • 迷茫

    迷茫2017-04-17 15:30:49

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

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

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

    返事
    0
  • キャンセル返事