Php 防止/保护来自用户的数据库实体

Php 防止/保护来自用户的数据库实体,php,sql,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, $d

我是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!"; 
}
请确保您输入了这些值。而不是:

$Username = $_POST['username']; 
$Email    = $_POST['email'];    
试试这个:

$Username = mysql_real_escape_string($_POST['username']);
$Email = mysql_real_escape_string($_POST['email']);
请注意,这个答案绝不意味着是一个详尽的反SQL注入资源,但希望它能让您走上正确的轨道。

确保您是正确的值。而不是:

$Username = $_POST['username']; 
$Email    = $_POST['email'];    
试试这个:

$Username = mysql_real_escape_string($_POST['username']);
$Email = mysql_real_escape_string($_POST['email']);
请注意,这个答案绝不意味着是一个详尽的反SQL注入资源,但希望它能让您走上正确的道路。

您可能应该使用它。而不是:

$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));
让库为您处理所有报价。

您可能应该使用。而不是:

$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));

让库为您处理所有引用。

除了mysql\u real\u escape\u字符串之外,还要尝试验证输入。用户不应该被允许输入任何内容。使用regexp语法和类型转换或settype。我指的是php中的服务器端。javascript验证是不够的,我看到许多程序员和网站管理员在js验证上花费了更多的精力,而在php中他们根本不写验证。

除了mysql\u real\u escape\u字符串之外,还要尝试验证输入。用户不应该被允许输入任何内容。使用regexp语法和类型转换或settype。我指的是php中的服务器端。javascript验证是不够的,我看到许多程序员和网站管理员在js验证上花费了更多的精力,而在php中他们根本不写验证。

你可以使用real\u escape\u string。这将是更安全的扩展。-1:单次谷歌搜索就有大量关于此的文章。你可以使用real\u escape\u string。那将是安全到更大的程度。-1:由于谷歌的一次搜索,关于这方面的文章有很多。+1对于PDO,准备好的声明才是最好的选择。还有,别忘了你的名字parameters@jcinacio,确实,命名参数非常值得做少量的额外工作,但当我过去用命名参数作为例子时,我得到的反馈是,这些例子看起来足够有用,人们会不必要地吓跑。对于这个查询,我可能不会费心,但是三个参数绝对是时候考虑只写命名版本。1对于PDO来说,准备好的报表是一条出路。还有,别忘了你的名字parameters@jcinacio,确实,命名参数非常值得做少量的额外工作,但当我过去用命名参数作为例子时,我得到的反馈是,这些例子看起来足够有用,人们会不必要地吓跑。对于这个查询,我可能不会费心,但是三个参数绝对是时候考虑只写命名版本。