Php Ajax登录系统的安全性

Php Ajax登录系统的安全性,php,javascript,jquery,mysql,ajax,Php,Javascript,Jquery,Mysql,Ajax,我已经制作了一个登录系统,它使用了一个基本的ajax请求和一些反馈,并且运行良好(代码在底部) 除了我将要输入的哈希和盐析密码(因此不要挂断),使用Ajax/jQuery处理这些请求的安全含义是什么:最重要的是: 与纯PHP相比,依赖JS是一种什么样的普遍看法?人们是否会进行冗余,简单地说这是一个只依赖JS的网站是否合法(大量网站基于Twitter引导,因此它有点依赖JS) 我的PHP和JS接口是否正确?(我的饼干还能用吗?) 如何创建一种安全的方法,以便在成功登录时使用jQuery.load(

我已经制作了一个登录系统,它使用了一个基本的ajax请求和一些反馈,并且运行良好(代码在底部)

除了我将要输入的哈希和盐析密码(因此不要挂断),使用Ajax/jQuery处理这些请求的安全含义是什么:最重要的是:

  • 与纯PHP相比,依赖JS是一种什么样的普遍看法?人们是否会进行冗余,简单地说这是一个只依赖JS的网站是否合法(大量网站基于Twitter引导,因此它有点依赖JS)

  • 我的PHP和JS接口是否正确?(我的饼干还能用吗?)

  • 如何创建一种安全的方法,以便在成功登录时使用jQuery.load()导入我的内容

  • 关于如何确保我的系统安全,有什么一般性建议吗

     $(function login() {
    
     $("form .button").click(function () {
    
     // getting form values and assigning variable names
     var username = $("form #username").val();
     var password = $("form #password").val();
     var remember = $("form #remember").val();
    
     // concatenating variables to form the data used by the Ajax post method
     var dataString = 'username=' + username + '&password=' + password + '&remember=' + remember;
    
     // begin Ajax post function
     $.ajax({
         type: "POST",
         url: "controls/login/process.php",
         data: dataString,
         success: function (response) {
             if (response == 'success') {
                 alert("SUCCESS");
             } else {
                 $('.alert').find('span').text('Incorrect username or password');
                 $('.alert').addClass('alert-error').fadeIn('fast');
             }
         },
         error: function () {
             $('.alert').find('span').text('An error occured, try again');
             $('.alert').addClass('alert-error').fadeIn('fast');
    
         }
     });
    
     return false;
    
     });
     });
    
  • 这与

    <?php
    session_start();
    // Starting the session
    require '../../tools/db/connect.php';
    // Including the database connection file
    session_set_cookie_params(2*7*24*60*60);
    // Making the cookie live for 2 weeks
    
    if($_SESSION['reference'] && !isset($_COOKIE['unifyLogin']) && !$_SESSION['remember']){
        // If you are logged in, but you don't have the cookie and you have not checked the remember checkbox (a browser restart), destroy the session 
        $_SESSION = array();
        session_destroy();
        echo "expired";
    }
    
    $_POST['username'] = mysql_real_escape_string($_POST['username']);
    $_POST['password'] = mysql_real_escape_string($_POST['password']);
    $_POST['remember'] = (int)$_POST['remember'];
    // Escaping all input data
    $row = mysql_fetch_assoc(mysql_query("SELECT ID,REFERENCE FROM USER WHERE USERNAME='{$_POST['username']}' AND PASSWORD='{$_POST['password']}'"));
    
    if($row['REFERENCE']) {
    $_SESSION['secure'] =  false;
    // If everything is OK login
    $_SESSION['id'] = $row['ID'];
    $_SESSION['reference'] = $row['REFERENCE'];
    $_SESSION['remember'] = $_POST['remember'];
    // Store some data in the session
    setcookie('unifyLogin',$_POST['remember']);
    // We create the cookie
    echo "success";
    } else {
    echo "failure";
    }
    
    ?>
    

    确保网站安全的最佳方法是使用SHA-512加密密码

    $rounds = 5000
    $cryptedPwd = crypt($password, '$6$rounds=' . $rounds . '$SOMeSILLySTrInG$');
    
    要解密:

    $pwdEntered = trim($_POST['password']);
    if (crypt($pwdEntered, $pwdHashed) == $pwdHashed){
    // do something
    }
    
    您还可以添加一个暴力力量保护,可能带有一个日志文件


    我建议您使用PDO而不是普通的mysql connect。

    确保网站安全的最佳方法是使用SHA-512加密密码

    $rounds = 5000
    $cryptedPwd = crypt($password, '$6$rounds=' . $rounds . '$SOMeSILLySTrInG$');
    
    要解密:

    $pwdEntered = trim($_POST['password']);
    if (crypt($pwdEntered, $pwdHashed) == $pwdHashed){
    // do something
    }
    
    您还可以添加一个暴力力量保护,可能带有一个日志文件


    我建议您使用PDO而不是普通的mysql connect。

    您使用JS只是与服务器交互的另一种方式,而不是常规浏览。因此,它的安全性并不低于您请求的任何其他页面

    如果您将登录凭据发布到PHP页面以检查登录,请像存储常规请求(可能是会话)一样存储信息。现在,每次使用AJAX从服务器请求数据时,都要在服务器端再次检查会话,然后再发回数据。如果未授权,只需返回一个错误。在JS中,您现在可以检查响应并据此采取行动

    我的建议是,要使它安全,就要像普通浏览器一样开发每个页面。如果你能做到这一点,那么使用AJAX也是安全的


    作为非安全建议。除非你愿意牺牲一些访问者(旧手机、平板电脑或只是禁用js的浏览器),否则不要创建一个只使用javascript的网站。

    你使用js只是与服务器交互的另一种方式,而不是常规浏览。因此,它的安全性并不低于您请求的任何其他页面

    如果您将登录凭据发布到PHP页面以检查登录,请像存储常规请求(可能是会话)一样存储信息。现在,每次使用AJAX从服务器请求数据时,都要在服务器端再次检查会话,然后再发回数据。如果未授权,只需返回一个错误。在JS中,您现在可以检查响应并据此采取行动

    我的建议是,要使它安全,就要像普通浏览器一样开发每个页面。如果你能做到这一点,那么使用AJAX也是安全的

    作为非安全建议。除非你愿意牺牲一些访问者(旧手机、平板电脑或只是禁用js的浏览器),否则不要创建一个只使用javascript的网站

    当涉及到依赖JS的as时,一般的看法是什么 与纯PHP相反,人们是否会进行冗余,这合法吗 简单地说,这是一个JS唯一的网站(大量的网站是免费的) 基于Twitter引导,所以它有点依赖于JS)

    我的PHP和JS接口是否正确?(我的饼干还能用吗?)

    很难说现在有多少人在禁用javascript的情况下使用互联网,但你的javascript不应该太过拘谨,你的网站也应该在禁用javascript的情况下工作。这不难做到。对于AJAX查询,不应使用
    .click()
    ,而应使用
    .submit()
    并将其绑定到表单。这样,您仍然可以仅通过PHP处理表单

    这也是最好的做法之一,不要太绑定
    。在提交按钮上单击()
    事件,否则按enter键无法提交表单

    然后在PHP中,通过检查
    $\u服务器['X-Requested-With']
    ,您将能够知道请求是否已从jQuery发送

    然后你可以有两种不同的行为:

    if ( isset( $_SERVER['X-Requested-With'] ) ) {
        // comes from jQuery
    } else {
        // basic submit
    }
    
    我想这大概就是你应该如何连接你的应用程序

    如何创建一种安全的方法,现在使用jQuery.load()将我的 成功登录后的内容

    您可以从PHP返回true或false。或者,如果需要重新显示一些数据,可以传递一个json对象。假设您有一个要传回的数据数组

    PHP

    关于如何确保我的系统安全,有什么一般性建议吗

     $(function login() {
    
     $("form .button").click(function () {
    
     // getting form values and assigning variable names
     var username = $("form #username").val();
     var password = $("form #password").val();
     var remember = $("form #remember").val();
    
     // concatenating variables to form the data used by the Ajax post method
     var dataString = 'username=' + username + '&password=' + password + '&remember=' + remember;
    
     // begin Ajax post function
     $.ajax({
         type: "POST",
         url: "controls/login/process.php",
         data: dataString,
         success: function (response) {
             if (response == 'success') {
                 alert("SUCCESS");
             } else {
                 $('.alert').find('span').text('Incorrect username or password');
                 $('.alert').addClass('alert-error').fadeIn('fast');
             }
         },
         error: function () {
             $('.alert').find('span').text('An error occured, try again');
             $('.alert').addClass('alert-error').fadeIn('fast');
    
         }
     });
    
     return false;
    
     });
     });
    
    您以POST(通过AJAX)方式发送数据,这并不比以正常方式发布数据的安全性差

    当涉及到依赖JS的as时,一般的看法是什么 与纯PHP相反,人们是否会进行冗余,这合法吗 简单地说,这是一个JS唯一的网站(大量的网站是免费的) 基于Twitter引导,所以它有点依赖于JS)

    我的PHP和JS接口是否正确?(我的饼干还能用吗?)

    很难说现在有多少人在禁用javascript的情况下使用互联网,但你的javascript不应该太过拘谨,你的网站也应该在禁用javascript的情况下工作。这不难做到。对于AJAX查询,不应使用
    .click()
    ,而应使用
    .submit()
    并将其绑定到表单。这样,您仍然可以仅通过PHP处理表单

    这也是最好的做法之一,不要太绑定
    。在提交按钮上单击()
    事件,否则按enter键无法提交表单

    然后在PHP中,您将能够了解
    $_POST['username'] = mysql_real_escape_string($_POST['username']);
    $_POST['password'] = mysql_real_escape_string($_POST['password']);
    $_POST['remember'] = (int)$_POST['remember'];
    // Escaping all input data
    $row = mysql_fetch_assoc(mysql_query("SELECT ID,REFERENCE FROM USER WHERE USERNAME='{$_POST['username']}' AND PASSWORD='{$_POST['password']}'"));
    
    if($row['REFERENCE']) {
    $_SESSION['secure'] =  false;
    // If everything is OK login
    $_SESSION['id'] = $row['ID'];
    $_SESSION['reference'] = $row['REFERENCE'];
    $_SESSION['remember'] = $_POST['remember'];
    // Store some data in the session
    setcookie('unifyLogin',$_POST['remember']);
    // We create the cookie
    echo "success";