2

ここにいる他の人なら簡単に解決できると確信している、ちょっと面白い問題があります。クエリ文字列全体をハッシュし、そのハッシュ値を投稿データに含める必要があります。

他のいくつかの方法を試した後、javascript でこれを実行しようとしています。どういうわけか、ハッシュされるフォームから文字列が引き出される順序は、送信時に引き出される方法とは異なるようです。

特定のクラスを持つ非表示の要素を除外して、ハッシュするクエリ文字列を構築し、最終的な送信の前にその非表示の要素にハッシュ値を設定しています。

私が間違っている可能性があること、または文字列の作成と送信の両方で要素の順序が同じであることを確認する方法はありますか?

関連するスニペット:

var allFormDat = document.getElementById("frmPayment").elements;
var hashingString ='';
var hashVal;
for (i=0;i<allFormDat.length;i++) {
    if (allFormDat[i].className!="nohash"){
        hashingString+=allFormDat[i].name+'='+allFormDat[i].value+'&';
    }
} 
hashingString.substring(0, hashingString.length - 1);
hashingString += '[salt]';

hashVal=SHA1(hashingString);
frm.hashValue.value=hashVal;

document.getElementById('frmPayment').submit();
4

1 に答える 1

1

まず、コンポーネントを URI エンコードしていません。おそらく次のことを行う必要があります。

var field = allFormDat[i];
hashingString += encodeURIComponent(field.name) + '='
               + encodeURIComponent(field.value) + '&';

substringその場では機能しません。以下を再割り当てする必要があります。

hashingString = hashingString.substring(0, hashingString.length - 1);
于 2013-05-14T02:19:27.830 に答える