如何使我的PHP/mySQL注册更安全?
可能重复:如何使我的PHP/mySQL注册更安全?,php,mysql,Php,Mysql,可能重复: 我的问题是如何使注册页面更安全?在register.html上,用户添加一些数据,如果register.php中的用户名存在于数据库中,它会告诉用户使用另一个用户名 它是否不适合SQL注入?另一方面,如何确保用户只使用字母数字字符 register.php $sql ="SELECT * FROM $table_name WHERE username= '$_POST[username]'"; $result = @mysql_query($sql,$connection) or
我的问题是如何使注册页面更安全?在register.html上,用户添加一些数据,如果register.php中的用户名存在于数据库中,它会告诉用户使用另一个用户名 它是否不适合SQL注入?另一方面,如何确保用户只使用字母数字字符 register.php
$sql ="SELECT * FROM $table_name WHERE username= '$_POST[username]'";
$result = @mysql_query($sql,$connection) or die(mysql_error());
//get the number of rows in the result set
$num = mysql_num_rows($result);
//checks it see if that username already exists
if ($num != 0){
echo "<P>Sorry, that username already exists.</P>";
echo "<P><a href=\"#\" onClick=\"history.go(-1)\">Try Another Username.</a></p>";
exit;
}else{
$sql = "INSERT INTO $table_name VALUES
('$_POST[firstname]', '$_POST[lastname]', '$_POST[username]', password('$_POST[password]'), 'Users', '', '', '$pchange',
'$_POST[email]', '$default_url', '$verify', '')";
$sql=“从$table_name中选择*,其中username='$\u POST[username]”;
$result=@mysql\u query($sql,$connection)或die(mysql\u error());
//获取结果集中的行数
$num=mysql\u num\u行($result);
//检查该用户名是否已存在
如果($num!=0){
echo“对不起,该用户名已经存在。
”;
回声“”;
出口
}否则{
$sql=“插入到$table\u名称值中”
(“$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\,
“$”发布[电子邮件]、“$默认url”、“$验证”、“”;
切勿将值从用户直接传递到数据库
请看一下mysql\u real\u escape\u string()
使用而不是将参数嵌入sql查询
$pdo = new PDO(*pdo parameters here*);
$sql = "SELECT * FROM $table_name WHERE username= ?";
$stmt = $pdo->prepare($sql);
$rslt = $stmt->execute(array($_POST[username]));
if (!$rslt){
var_dump($stmt->errorInfo());
}
$num = $stmt->rowCount();
// ................//
else{
$sql = "INSERT INTO $table_name VALUES (?,?,?,?,?,?,?,?,?,?,?,?)";
$stmt_ins = $pdo->prepare($sql);
$stmt_ins->execute(array(
$_POST[firstname],
$_POST[lastname],
$_POST[username],
password($_POST[password]),
'Users', '', '', $pchange,
$_POST[email], $default_url, $verify, ''
));
}
您应该使用来清理所有POST值,从而避免SQL注入攻击 尝试使用以下功能:
<?php
//This stops SQL Injection in POST vars
foreach ($_POST as $key => $value) {
$_POST[$key] = mysql_real_escape_string($value);
}
//This stops SQL Injection in GET vars
foreach ($_GET as $key => $value) {
$_GET[$key] = mysql_real_escape_string($value);
}
?>
偷自:See begins on(但不是,它极易受到注入攻击,我打赌它也容易受到XSS攻击)。我读到,使用准备好的语句可以保护应用程序免受SQL注入和XSS攻击。这正确吗?对SQL注入-是。对XSS-部分。