現在、次のような標準のログインフォームがあります。
<?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テストガイドは、見てください。
ログイン機能に関連する2つのセクションを見つけてください。