PHP中写SQL,不使用PDO的话,如何不拼接SQL,从而避免注入攻击?
$query = sprintf("SELECT * FROM Users where UserName='%s' and Password='%s'",
mysql_real_escape_string($Username),
mysql_real_escape_string($Password));
mysql_query($query);
or
$db = new mysqli("localhost", "user", "pass", "database");
$stmt = $mysqli -> prepare("SELECT priv FROM testUsers WHERE username=? AND password=?");
$stmt -> bind_param("ss", $user, $pass);
$stmt -> execute();
直接写sql的方式是一定没办法避免注入攻击的
我一般是在页面引入一个这样的文件
/**
- 根据服务器配置信息来判断是否需要加反斜线
- @param mixed $mixed
- @since 2007/03/04 */ function __addslashes(&$mixed) { if (get_magic_quotes_gpc()) { return; } if (is_array($mixed)) { foreach ($mixed as $key => $value) { $mixed[$key] = addslashes($value); } } else { addslashes($mixed); } }
/**
- 防止字符串中有SQL注入非法字符
- (晕~又是一年) *
- @param mixed $mixed
- @since 2008/03/28 */ function __antiSQLInjection(&$mixed) { if (is_array($mixed)) { array_map('mysql_real_escape_string', $mixed); } else { mysql_real_escape_string($mixed); } }
__addslashes($_POST);
__antiSQLInjection($_POST);
__addslashes($_GET);
__antiSQLInjection($_GET);
http://zh.wikipedia.org/w/index.php?title=%E5%8F%83%E6%95%B8%E5%8C%96%E6%9F%A5%E8%A9%A2&variant=zh-cn#PHP