4 php mysql pdo code-injection
所以我有一个朋友尝试在我的网站上运行SQLinjection,他设法使用下面的代码进入它.我怎么能阻止这个?我已经阅读了有关清理变量的内容,但我该怎么做?
'; INSERT INTO登录(用户名,密码)VALUES('Gjertsmells','密码'); SELECT'密码'FROM登录WHERE'x'='x
$db = new PDO('mysql:host=XXXXXXXX;dbname=XXXXXXX', 'XXXXXXXXXX', 'XXXXXXXXX');
// query MySQL to verify login
$query = $db->prepare("SELECT password FROM login WHERE username='$username'");
$query->execute();
$column = $query->fetchColumn();
if($column === $password)
Run Code Online (Sandbox Code Playgroud)
准备语句的想法是你不连接变量,而是绑定参数.区别在于变量永远不会插入到SQL中,而是MySQL引擎单独处理变量,这样就不会出现SQL注入.这还有额外的好处,即不需要对变量进行转义或预处理.
$query = $db->prepare("SELECT password FROM login WHERE username = :username");
$query->execute(array(':username' => $username));
Run Code Online (Sandbox Code Playgroud)
准备你的声明如下:
$query = $db->prepare("SELECT `password` FROM `login` WHERE `username` = :username");
$query->execute(array(":username" => $username));
Run Code Online (Sandbox Code Playgroud)
或者使用相同的预准备语句绑定参数,如下所示:
$query->bindParam(":username", $username, PDO::PARAM_STR);
$query->execute();
Run Code Online (Sandbox Code Playgroud)
这样您就不必清理查询.
| 归档时间: |
|
| 查看次数: |
6595 次 |
| 最近记录: |