通过ajax登录和注册是否安全?

时间:2018-08-14 03:43:06

标签: javascript php ajax

我的JS代码(仅示例,可能存在语法错误)

$(document).on('click','#btnEdit',function(e){ 
    var id = $("#inp_id").val(), ps = $("#inp_ps");     
    $.ajax({
        type: 'POST',
        url: 'http://example.php',
        data: {act:'#LogIn',id:id,ps:ps},
        success: function(response){
            if($.trim(response) === "success"){
                alert("Login Successful");   
            }
            else{
                alert("Invalid ID or Password");
            }
        }
    });
});

在php中

if($_POST[act] == "#LogIn"){
    $userid = Encrypt($_POST[id],$key1);
    $userps = hashPS($_POST[ps],$salt);
    //query...
    if(result > 0){
         $_SESSION['id'] = Encrypt($userid,$key2);
         $_SESSION['token'] = //random code;
    }
}


我的问题:

有什么方法可以确保代码安全吗?因为我认为攻击者可以编写自己的脚本,然后将数据发送到php以获取和ID。 也许使用ajax登录和注册只是一个坏主意。

2 个答案:

答案 0 :(得分:2)

签出The definitive guide to form-based website authentication [closed]


从前端敬礼主要是为了保护用户的隐私。 CAPTCHA 旨在验证您的用户是真实人物,而是蜘蛛,并保护您的服务器免受DDOS attack的侵害。

要确保安全性,您需要HTTPS。如果在没有HTTPS的情况下实施登录服务(例如Man-in-the-Middle-Attack),则存在潜在的风险。所以我必须在这里提供一个后端解决方案。

Raptor所述,攻击者仍然可以通过蛮力测试密码。确实是的。但是,如果您正确选择了加密算法,则破解单个密码将需要数百万年的时间。

此外,还有另一种名为Cross-site request forgery的攻击。您必须通过简单地引入ffmpeg -loop 1 -i image.jpg -i audio.mp3 -shortest -c:v libx264 -c:a copy result.mkv 来阻止它。

我在一年前问过question(【django-1.11.3/angular-1.6.4】POST AJAX CSRF verification failed),您会从中得到一些启发。

Certbot

安装

 SELECT A.OtherID,  
     Split.a.value('.', 'VARCHAR(100)') AS Data  
 FROM  
 (
     SELECT OtherID,  
         CAST ('<M>' + REPLACE(Data, ',', '</M><M>') + '</M>' AS XML) AS Data  
     FROM  Table1
 ) AS A CROSS APPLY Data.nodes ('/M') AS Split(a); 

配置

csrf_token

不是Certbot

如果使用 OAuth 并让Google或Facebook等服务提供商负责登录安全性,有时会更好。

答案 1 :(得分:2)

确保其安全的最佳做法如下。

  1. 实施CSRF令牌,因此每个请求都使用CSRF(跨站点请求伪造)发送。 CSRF确保请求是否有效。您可以从here

  2. 获取有关CSRF实施的更多详细信息
  3. 在服务器端应用IP检查。检查请求来自哪个IP。您应该只接受来自您自己的服务器的请求。为此,您可以使用$ _SERVER ['REMOTE_ADDR']

  4. 客户端上的
  5. Captcha可以防止BOTS攻击Google Recaptcha最好用于此目的。详细信息为here

如果您应用上述内容,则对于POST请求来说将足够安全。