通过ajax登录是否安全?

时间:2014-05-01 22:26:37

标签: php ajax json login

当我使用ajax进行登录时,它是否安全?我不确定jquery部分中的输入值是否安全。我应该在jquery中使用md5,sha1的一些库吗?

我在谈论这一部分:

data: { mail: $('.login_form .mail').val(), pass: $('.login_form .pass').val() }

全:

$.ajax({
            type: "POST",
            url: "./ajax/identifyLogin.php",
            data: { mail: $('.login_form .mail').val(), pass: $('.login_form .pass').val() },
            dataType:'JSON', //or HTML, JSON, etc.
            success: function(response){
                if (response.status == "fail") {
                  e.preventDefault();
                }
            }
        });
});

并且在identifyLogin.php中我有这段代码

$mail = strtolower(mysql_real_escape_string($_POST["mail"]));
        $password = sha1(md5($_POST["pass"]));
        if($mail == "" || $password == ""){
            echo json_encode(array("status"=>"fail"));
        }else{
            $data = mysql_query("select * from users where mail='$mail' and password='$password'");
            if(mysql_num_rows($data) == 0){
                echo json_encode(array("status"=>"fail"));
            } else {
                while($radek = mysql_fetch_assoc($data)){
                    echo json_encode(array("status"=>"success")); 
                }
            }
        }

2 个答案:

答案 0 :(得分:0)

您应该使用mysqli_*PDO代替,mysql_*depreciated

使用ajax登录本身不是问题,但确保未捕获用户凭据的方法是使用带有签名HTTPS证书的SSL

答案 1 :(得分:0)

AJAX本身并不比标准HTML表单回发更安全;所以你一定要使用HTTPS。但是你的解决方案存在许多问题,仅举几例:

  • 仅存储带有盐的密码哈希
  • 如果可以
  • ,请使用比sha1更好的哈希值
  • 不传输密码,使用服务器提供的盐(并针对当前会话检查)在客户端上散列密码
  • 使用时间常数的服务器端检查
  • 使用PDO或mysqli

这个问题表明你对安全性还不强。我建议你使用复杂的框架(比如Symfony2),因为它们正是为了防止这种安全漏洞。