1

パスワード入力フォームの一部の文字に問題があります

" = \"

' = \'

\ = \\

& = empty

+ = empty

したがって、ユーザーが入力した場合 n1N'11

出力で彼は得るでしょう n1N\\\'11

1)私が間違っていることは何ですか?ajax-php パスワード検証ファイルでは、単純に使用$password=$_POST['password'];してそのような結果を取得します。mysqlにデータを記録するファイルでは、$password = $mysqli->real_escape_string($_POST['password']);. しかし、これらの問題はすでにパスワードの検証段階にあります...

2) 変更方法は?\" を " に戻すことはできますが、空を & または + に変更することはできません。訪問者が何を入力したかがわからないからです。または単に & と + の入力を許可しない

3) 上記のようなキャラクターは他にもいますか?

私はプログラミングが初めてです。おそらく質問はばかげています。

申し訳ありませんが、ここに ajax コードがあります。しかし、私は私の問題を解決したようです。渡す前にencodeURIComponentを使用する必要があります

<script type="text/javascript">
// Pasword validation
//pass data without page refresh
function ValidatePassword(){
// Create our XMLHttpRequest object
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
var hr = new XMLHttpRequest();
}
else
{// code for IE6, IE5
var hr = new ActiveXObject("Microsoft.XMLHTTP");
}
// Create some variables we need to send to our PHP file
var url = "_validator.php";
var pass = document.getElementById("password").value;

var vars_pass = "&password="+encodeURIComponent(pass);

hr.open("POST", url, true);
// Set content type header information for sending url encoded variables in the request
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// Access the onreadystatechange event for the XMLHttpRequest object
hr.onreadystatechange = function() {
if(hr.readyState == 4 && hr.status == 200) {
var return_data = hr.responseText;
document.getElementById("CheckPassword").innerHTML = return_data;

}
}
// Send the data to PHP now... and wait for response to update the status div
hr.send(vars_pass); // Actually execute the request
document.getElementById("CheckPassword").innerHTML = "processing...";
}
</script>
4

1 に答える 1

0

渡す値をencodeURIComponent()でjavascriptでラップしてみてください。そうすれば、値が正しく保持されるはずです。

于 2013-02-07T15:09:45.500 に答える