您应该使用单引号和mysql_real_escape_string的组合或移入PDO.
mysql_real_escape_string将负责清理要存储在数据库中的任何不干净的变量,单引号将阻止其中的任何执行.
这是一个例子:
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
Run Code Online (Sandbox Code Playgroud)
PDO的例子:
$dbh = new PDO('mysql:dbname=your_database;host=your_host', $user, $password);
$stmt = $dbh->prepare('SELECT * FROM users WHERE user = :username AND password = :password');
$stmt->execute(array('username' => $user, 'password' => $password));
Run Code Online (Sandbox Code Playgroud)
如果您没有正确清理要存储的数据,则可能会遭受SQL注入.
例如,普通查询
SELECT * FROM users WHERE user = 'test'
Run Code Online (Sandbox Code Playgroud)
注入查询:
SELECT * FROM users WHERE user = 'anything' OR 'x'='x'
Run Code Online (Sandbox Code Playgroud)
另一个例子:
SELECT * FROM users WHERE user = ' '; DROP TABLE users
Run Code Online (Sandbox Code Playgroud)
有关SQL注入攻击的更多信息:SQL注入预防,MySQL注入
| 归档时间: |
|
| 查看次数: |
7732 次 |
| 最近记录: |