如何使我的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-部分。