認証中のASCII以外のユーザー名またはパスワードの問題
1388 ワード
実際の環境では、一部のユーザーがASCIIコードではないユーザ名またはパスワードを使っています.ここで2つの問題が発生しました.は、非NLA検証において、これらの文字列をUnicodeに正常に変換して送信しないと、RDPプロトコル検証中に失敗する.Javascriptでこのことをしたので、この点に特に注意しなければなりません.JavascriptはUTF-16を使っています.この場合、 はNRA検証のもう一つがあり、この場合問題を引き起こす可能性があるのはCharUpperWというタイプの関数です.NLA検証では、プロトコル要件(可能性があります.既存のオープンソースコードから推定されます)が、ユーザ名とパスワードをフル大文字の文字列に変換するためです.問題は、Windows以外のシステムでこれを達成するのは難しいということです.FreeeRDPの中にこれに関するIssueがあります.最後に見つけられるソリューションは実はWineというプロジェクトから得られたものです.Windows以外のシステムでCharUpperWを達成するには、Wineの同じ機能の関数が必要です.また、自動生成Mapを導入する必要があります.Mapファイルの位置はcasemap.cです.大文字にしか関心がない人にとっては、wine_を導入すればいいです.casemap_up perというMapでいいです.
String.prototype.charCodeAt()
が取得した値はASCIIの範囲内か、それともこの範囲外かを区別して、正しいWindows読み取り可能なUnicodeの文字列を構成することに注意する.例:function rdp_write_unicode_string(stream, string, len) {
var j=0, i=0;
while(i < len) {
var code = string.charCodeAt(j++);
if (code > 256) {
code &= 0xffff;
stream.data[stream.p+i] = code & 0xff;
i++;
stream.data[stream.p+i] = (code>>8) & 0xff;
i++;
}
else {
stream.data[stream.p+i] = code;
i++;
stream.data[stream.p+i] = 0;
i++;
}
}
stream.data[stream.p+i] = 0;
i++;
stream.data[stream.p+i] = 0;
i++;
stream.p += len + 2;
}