2015-12-03 63 views
0

我正在爲我的網站做一個簡單的登錄,我正在使用ajax與數據庫交互。我想使它有點安全,所以我尋找ajax的安全性,所以我搜索AJAX authentication並在SO中閱讀關於這個問題。找到this和鏈接到this。不幸的是我真的不明白它的作用或工作原理。我希望有人會爲我澄清這一點。通俗的說法。beforeSend jquery ajax

$(document).on('click', '#login', function() { 
 
    var UserName = $('#username').val(); 
 
    var PassWord = $('#password').val(); 
 
    console.log(UserName); 
 
    if (UserName) { 
 
     if (PassWord) { 
 
      $.ajax({ 
 
       type: 'POST', 
 
       url: 'ajax/Login.php', 
 
       dataType: "json", 
 
       data: { 
 
        username: UserName, 
 
        password: PassWord 
 
       }, 
 
       beforeSend: function(xhr) { 
 
        xhr.setRequestHeader("Authorization", "Basic " + btoa(UserName + ":" + PassWord)); 
 
       }, 
 
       success: function(data) { 
 
        if (data.error == true) { 
 
         $("#dialog").html(data.message); 
 
         $("#dialog").dialog({ 
 
          title: "Login" 
 
         }); 
 
         $("#dialog").dialog("open"); 
 
        } else { 
 
         window.location = 'pages/dashboard.php'; 
 
        } 
 
        //window.location = 'pages/dashboard.php'; 
 
       }, 
 
       error: function(data) { 
 
        alert('Login Error'); 
 
        //window.location='../login.php'; 
 
       } 
 
      }); 
 
     } else { 
 
      $("#dialog").html("Password is empty!"); 
 
      $("#dialog").dialog({ 
 
       title: "Owner Information" 
 
      }); 
 
      $("#dialog").dialog("open"); 
 
     } 
 
    } else { 
 
     $("#dialog").html("Username is empty!"); 
 
     $("#dialog").dialog({ 
 
      title: "Login" 
 
     }); 
 
     $("#dialog").dialog("open"); 
 
    } 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input type="text" name="un" id="username" /> 
 
<input type="password" name="pw" id="password" /> 
 
<input type="button" id="login" value="Login " name="login1" style="background-color:#feaa38;width: 100px" />

上面這段代碼是我的代碼和附加的代碼,我從鏈接了。 以下是附加代碼。

beforeSend: function(xhr) { 
    xhr.setRequestHeader("Authorization", "Basic " + btoa(UserName + ":" + PassWord)); 
}, 

我想知道。

  1. ajax身份驗證是做什麼的。
  2. 我真的需要它。
  3. 我怎麼知道它在工作。
  4. 它真的做了什麼。

回答

1
  1. 不要太在這裏抓住Ajax。這只是利用Apache提供的「基本」身份驗證。用戶/密碼需要與引用的.htpasswd文件中的用戶匹配。 Apache將攔截請求,然後在驗證之後將請求重新路由到原始目的地,並且現在已經存儲了授權會話。

  2. 這似乎是矯枉過正。您正在發送用戶名和密碼來驗證所有未來的服務器請求(推測),而不僅僅是登錄到您的軟件。在兩個地方控制用戶似乎有點多,而不是一個。

  3. 如果您以保護您的網頁的方式使用密碼和用戶名來查看網站,那麼這將確保每個請求都必須遵循此要求。但是,一旦他們登錄,執行此操作是多餘的。

  4. 這是通過1-3來解釋的。

這看起來好像過火了,我不認爲它增加了安全性。一旦有人知道一個密碼,他們都知道。拋棄它。

+0

我明白了。我真的不明白beforeSend是如何通過閱讀這些鏈接工作的,因爲他們沒有解釋太多。我還有一個問題,例如我有更多的Ajax請求在我的網站(在短跑我有ajax請求)我如何確保讓他們安全?我的意思是更安全。我可以問另一個問題,但我可能會重複關於這個當前的問題,如果我發佈'。我也想感謝你解釋*我很瞭解它的工作原理*。 ***希望你可以建議一個更好的方法來使Ajax請求更安全*** – Martin

+0

在1號答案你說'用戶/通道需要匹配那些被引用的.htpasswd文件,如果這將澄清我在數據庫中保存我的密碼。我是否需要將它保存在該文件中,如果我想要做這種安全性的話? – Martin

+0

@Martin你會的。因爲這特別針對Apache使用的「基本授權」。這需要用戶名在虛擬主機聲明中引用的'.htpasswd'文件中。 – Ohgodwhy

相關問題