AJAX 调用是否比普通的 POST 方法更不安全?

信息安全 php javascript html 阿贾克斯
2021-08-28 19:33:37

我目前有一个像这样的标准登录表单:

<?php
if( isset( $_POST['username], $_POST['password'] ) ) {
    // escape both strings and compare them to database
}

?>
<form action="" method="post">
    <input type='text' value='username' name='username'></input>
    <input type='password' value='password' name='password'></input>
    <input type='submit' value='submit'></input>
</form>

我想移动到 AJAX,所以新页面不会刷新。这是我的新方法:

<script>
function login_ajax() {
     var formdata = new FormData();
     var ajax = new XMLHttpRequest();
     formdata.append('username', document.getElementById('username').value;
     formdata.append('password', document.getElementById('password').value;
     ajax.open( "POST", "https://my-website.com/login_validation.php" );
     ajax.onreadystatechange = function() {
         if(ajax.readyState == 4 && ajax.status == 200) {
             // do something
         }
    }
    ajax.send( formdata );
}

</script>
?>
<form action="" method="post" onsubmit='login_ajax(); return false;'>
    <input type='text' value='username' id='username'></input>
    <input type='password' value='password' id='password'></input>
    <input type='submit' value='submit'></input>
</form>

我的login_validation.php样子是这样的:

<?php
if( isset ( $_POST['username'], $_POST['password'] ) ) {
    // escape strings compare to database and sign on

}

第二种方法比第一种安全吗?

2个回答

它们都同样安全。在任何版本中都可能犯错误,但没有一个天生就比另一个更好。

与您的登录安全相关的是服务器端。您不能对客户端设置任何安全限制,因为任何此类限制都可以轻易绕过。所以这里重要的是服务器端的代码进行验证。这里的两个选项都是一样的——它检查它是否是一个 POST 请求,并检查用户名和密码是否正确。

正如安德斯所说,这并不重要——无论是 AJAX 还是非 AJAX。主要的安全原则取决于您如何保护代码。OWASP 测试指南是一个很好的开始让你看看。

请找到与登录功能相关的两个部分:

https://www.owasp.org/index.php/Testing_Identity_Management

https://www.owasp.org/index.php/Testing_for_authentication