ホームページ  >  記事  >  バックエンド開発  >  PHP は ajax を使用してパスワードを送信しますが、受信側ではパスワードが切り取られていることがわかります。

PHP は ajax を使用してパスワードを送信しますが、受信側ではパスワードが切り取られていることがわかります。

WBOY
WBOYオリジナル
2016-06-23 13:42:271200ブラウズ

私は PHP をあまり使ったことがありません。質問するためにこのフォーラムに来ました。
ここで発生する問題は、ユーザーがログインするためにユーザー名とパスワードを入力することです。パスワードが単純であれば、渡すことができます。しかし、パスワードが ab@;&1 の場合、サーバーによって取得されたパスワード値が切り取られ、ab@; になることがわかります。ただし、コードの次の部分もこの方法で動作しますが、2 つの場所の違いがわかりません。

クライアント部分の PHP

function getFirstU8Accid(){	var sUserName = document.getElementById("user_name").value.toLowerCase();	var sPassword = document.getElementById("password").value;	sUserName = escape(sUserName);	if(sUserName=="")	{		return("");	}	var sUrl = '/Server/a.php?t='+escape(Date())+'&a='+sUserName+'&b='+sPassword;        var xml = CreateXMLHttp();	xml.open("GET",sUrl,false);	xml.send();	var sLoginUser = xml.responseText;        //处理.......}                                        //具体调用处如下代码所示                                        //此处调用getFirstU8Accid()失败,具体错误是服务端的PHP并没有得到完整的密码内容。					Accid = getFirstU8Accid();					try{var guid = obj.GetClientGUID();}catch(e){return " Error:failed to call GetClientGUID,error message:" + e.message;}					var sUrl = '/Server/b.php?t='+escape(Date())+'&a='+user+'&b='+password+'&c='+sDomain;					var xml = CreateXMLHttp();					xml.open("GET",sUrl,false);					xml.send(null);                                        //此处能正常返回,因为b.php中的代码能正常获取到密码内容					return xml.responseText;[/color]a.php   b.php中的代码大概如下,其实基本一样,只是b中参数多了,多了一个解析的。[code=php]<?php $langs=$_COOKIE['LANGUAGES'];$langs=empty($langs) ? 'cn' : $langs;$language=include"lang-$langs.php";require("CmxConsts.php");require("CmxCommon.php");try {	$sUserName = $_GET["a"];	$sUserName = str_replace("|YJ|","&",$sUserName);	$sUserName = str_replace("|YJJ|","#",$sUserName);        //下面获取的密码就被裁剪了。	$sPassword = $_GET["b"];       //...................?>


最初に失敗した後、パラメーターを増やして 2 回目を試みたところ、成功したような気がしました。サーバー側には a と b の 2 つの PHP ファイルがありますが、実際には違いはありません。


ディスカッションへの返信 (解決策)

値にこの文字が含まれる場合、& 文字がフィールド区切り文字として表示されます。URL エンコード (%26) を行う必要があります。

バージョン マスター。はとても速いのですが、2回目に提出したときは処理されなかったようです。

また、URLエンコード処理用のユニバーサルコードはありますか?私はトリリンガル (中国語、英語、繁体字) ですが、影響を受けますか? PHP に詳しくありません。使用したばかりですが、関連する情報や例はありますか?

js には encodeURI メソッドと encodeURIComponent メソッドはありませんか?

問題は解決しました。最初の処理では、パスワードに対するエスケープ操作は行われませんが、受信側でアンエスケープ処理が実行されます。そして2位はペアです。バージョンのヒントをありがとう。

var sUrl = '/Server/a.php?t='+escape(Date())+'&a='+sUserName+'&b='+sPassword;

var sUrl = '/Server/ a.php?t='+escape(Date())+'&a='+encodeURIComponent(sUserName)+'&b='+encodeURIComponent(sPassword);

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。