当使用如下登录代码时:就会引发sql注入问题
怎么注入呢?
‘or 1=1 #
就可以了。
为什么呢?
首先or:在sql中是或者,只要满足前一个或后一个条件即可,只要所以不论你是 ‘or 1=1 #还是 ‘or 2=2 #,都可以。
#: 是注释的意思,在sql中注释掉后面的密码判断。
所以这一段不用不用密码即可输入成功,
怎么办呢?
在php中,可以有很多方法。。。。就不举例了。
<!doctype html> <html lang="ch"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="doAction.php" method="post"> 用户名:<input type="text" name="username"/><br/> 密码:<input type="password" name="password"/><br/> <input type="submit" value="submit" /> </form> </body> </html>
<?php header(‘content-type:text/html;charset=utf8‘); $username = $_POST[‘username‘]; $password = $_POST[‘password‘]; try { $pdo = new PDO(‘mysql:host=localhost;dbname=test‘, ‘root‘, ‘root‘); $sql = "SELECT * FROM user WHERE username=‘{$username}‘ AND password=‘{$password}‘"; $stmt = $pdo->query($sql); echo $sql; echo $stmt->rowCount(); } catch (PDOException $e) { echo $e->getMessage(); }
时间: 2024-10-14 19:31:36