我是sql的新手,如何让这段代码更安全,不受sql注入和错误操作的影响。
// Variables
$db_host = 'localhost';
$db_user = 'user';
$db_pass = 'pass';
$db_name = 'db';
$Username = $_POST['username'];
$Email = $_POST['email'];
// DB Connect
$connect = mysql_connect( $db_host, $db_user, $db_pass ) or die( mysql_error() );
$connection = $connect;
mysql_select_db( $db_name, $connect ) or die( mysql_error() );
// Inserting into DB
$qInsertUser = mysql_query(" INSERT INTO `database` (`id`, `username`, `email`) VALUES ( ``, `$Username`, `$Email`) ");
if ($qInsertUser){
echo "You are now subscribed to our newsletter. Thank you!";
} else {
echo "Error!";
}发布于 2011-05-25 11:52:43
您可能应该使用prepared statements。而不是:
$qInsertUser = mysql_query(" INSERT INTO `database` (`id`, `username`, `email`) VALUES ( ``, `$Username`, `$Email`) "); 将其替换为准备好的语句并执行:
$sth = $dbh->prepare('INSERT INTO `database` (`id`, `username`, `email`) VALUES (?, ?, ?)');
$sth->execute(array($id, $username, $email));让图书馆为你处理所有的引用。
发布于 2011-05-25 11:51:25
确保您正在escaping这些值。而不是:
$Username = $_POST['username'];
$Email = $_POST['email']; 试试这个:
$Username = mysql_real_escape_string($_POST['username']);
$Email = mysql_real_escape_string($_POST['email']);请注意,这个答案并不是一个详尽的反SQL注入资源,但希望它能让您走上正确的道路。
发布于 2011-05-25 12:25:32
除了mysql_real_escape_string之外,还要尝试验证输入。用户不应该被允许输入任何内容。使用regexp语法和类型转换或settype。我的意思是在php的服务器端。仅仅使用javascript验证是不够的,我已经看到许多程序员和站长在js验证上花费了更多的精力,而在php中,他们根本不编写验证。
https://stackoverflow.com/questions/6119320
复制相似问题