JavascriptクライアントからPHPWebサーバーにメッセージを渡そうとしています。セキュリティの層を追加するために、データオブジェクトにハッシュで署名したいと思います。
/* Generate signature of the data with the password */
that.signEnvelope = function(data,password)
{
return CryptoJS.SHA256(JSON.stringify(data) + password).toString();
};
これはサーバー上ですぐに崩壊します。JSON.stringify関数は、サーバー上のjson_encodeに1:1の一致する文字列を生成しないため、ハッシュを検証できません。
protected function verifySignature($remoteSignature,$data,$privateKey)
{
/* Combine json & key samen , then sha256 */
$localSignature = hash('sha256',json_encode($data) . $privateKey);
return ($localSignature === $remoteSignature);
}
ハッシュ可能な文字列を生成するPHPとJavascriptの両方で実装できる別のアルゴリズムはありますか?
結論
プラットフォーム間でjson_encodeを許可することは、賢明なことではありませんでした。標準的な実装はありません。
代わりに、連結と検証がはるかに簡単な文字列のキーと値のペアを持つ配列のみを許可するようになりました。