Php 防止/保护来自用户的数据库实体
我是sql新手,如何使这段代码在sql注入和错误行为中更加安全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
// 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,确实,命名参数非常值得做少量的额外工作,但当我过去用命名参数作为例子时,我得到的反馈是,这些例子看起来足够有用,人们会不必要地吓跑。对于这个查询,我可能不会费心,但是三个参数绝对是时候考虑只写命名版本。