防止/保护用户的数据库条目

时间:2011-05-25 03:46:56

标签: php sql

我是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!"; 
}

3 个答案:

答案 0 :(得分:1)

您应该使用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));

让库为您处理所有引用。

答案 1 :(得分:0)

确保您是escaping值。而不是:

$Username = $_POST['username']; 
$Email    = $_POST['email'];    

试试这个:

$Username = mysql_real_escape_string($_POST['username']);
$Email = mysql_real_escape_string($_POST['email']);

请注意,这个答案绝不是一个详尽的反SQL注入资源,但希望它能帮助您走上正确的道路。

答案 2 :(得分:0)

除了mysql_real_escape_string之外,还尝试验证输入。不应允许用户输入任何内容。使用regexp语法并输入cast或settype。我的意思是在php的服务器端。 javascript验证是不够的我已经看到许多程序员和网站管理员花费更多的精力在js验证,而在PHP他们根本没有写任何验证。