1

Node.js と Mongo DB でアプリケーションを作成し、Swig でビューをレンダリングしています。ビジネス名、住所、地理的位置データのデータベースがあり、Google マップにピンでプロットされています。

ビュー ソース、Firebug、Chrome 開発ツールなどを使用して、ユーザーが生の JSON データを簡単にコピーできないようにしたいと考えています。

私は銀行レベルのセキュリティを求めているわけではありません。ほとんどのユーザーがあきらめるのを難しくしたいだけです。

JSON パッケージをブラウザーに配信するには、次の 2 つのルートがあります。

1) Swig を使用して、JSON パッケージをビューに直接渡します。問題は、単純なビュー ソースが JSON を表示することです。

2) AJAX 呼び出しでデータを要求します。このシナリオでは、Chrome 開発ツールを使用してデータに簡単にアクセスできます。

私のオプションは何ですか?

4

4 に答える 4

1

Base-64 で文字列をエンコードします。
次に、JavaScript で base64 デコードするだけです。
もちろん、それは十分に読めないようにする必要がありますが、実際のセキュリティはありません-もちろん。
さらに、高速です。

UTF-8 文字に注意する必要があります (例: ドイツ語の äöüÄÖÜ、フランス語の èéàâôû)

たとえば、JavaScript では次のようになります。

var str = "äöüÄÖÜçéèñ";
var b64 = window.btoa(unescape(encodeURIComponent(str)))
console.log(b64);

var str2 = decodeURIComponent(escape(window.atob(b64)));
console.log(str2);

例:

 var imgsrc = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(markup)));
 var img = new Image(1, 1); // width, height values are optional params 
 img.src = imgsrc;

より安全なバリアント:
暗号化された base64 でエンコードされた JSON と復号化アルゴリズムを返し、それらをサーバー側で base64 エンコードし、数ビットビットシフトし、ajax を介して返し、Web ページの文字列を de-bitshift し、eval に渡します。復号化機能を提供し、暗号化されたbase64文字列を復号化し、その文字列をbase-64で復号化します。

しかし、Chromeデバッグコンソールで復号化するのにさらに数秒しかかかりません。私はそのようなものを一度復号化しました。(タブを気にしないでください。それらはブロートウェアです。時間をかけて自分で行うことをお勧めします);)

最近はhttp://www.slidetabs.com/で見つけたと思いますが、「暗号化」方式がまだそこにあるかどうかはわかりません。

さらに、JavaScript で文字列をエスケープすることもできます。これは次のようになります。

var _0xe91d=["\x28\x35\x28\x24\x29\x7B\x24\x2E\x32\x77\x2E

...


x5F\x63\x6F\x6E\x74\x5F\x64\x75\x72\x7C\x76\x5F\x74\x61\x62\x73\x5F\x61\x6C\x69\x67\x6E\x7C\x76\x5F\x74\x61\x62\x73\x5F\x64\x75\x72\x7C\x76\x5F\x73\x63\x72\x6F\x6C\x6C\x7C\x63\x6F\x6E\x74\x5F\x61\x6E\x69\x6D\x7C\x63\x6F\x6E\x74\x5F\x66\x78\x7C\x74\x61\x62\x5F\x66\x78\x7C\x72\x65\x70\x6C\x61\x63\x65\x7C\x62\x61\x6C\x69\x67\x6E\x7C\x61\x6C\x69\x67\x6E\x5F\x7C\x75\x6E\x6D\x6F\x75\x73\x65\x77\x68\x65\x65\x6C\x7C\x73\x77\x69\x74\x63\x68\x7C\x64\x65\x66\x61\x75\x6C\x74\x7C\x6A\x51\x75\x65\x72\x79","","\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65","\x72\x65\x70\x6C\x61\x63\x65","\x5C\x77\x2B","\x5C\x62","\x67"]
;eval(function (_0x173cx1,_0x173cx2,_0x173cx3,_0x173cx4,_0x173cx5,_0x173cx6){_0x173cx5=function (_0x173cx3){return (_0x173cx3<_0x173cx2?_0xe91d[4]:_0x173cx5(parseInt(_0x173cx3/_0x173cx2)))+((_0x173cx3=_0x173cx3%_0x173cx2)>35?String[_0xe91d[5]](_0x173cx3+29):_0x173cx3.toString(36));} ;if(!_0xe91d[4][_0xe91d[6]](/^/,String)){while(_0x173cx3--){_0x173cx6[_0x173cx5(_0x173cx3)]=_0x173cx4[_0x173cx3]||_0x173cx5(_0x173cx3);} ;_0x173cx4=[function (_0x173cx5){return _0x173cx6[_0x173cx5];} ];_0x173cx5=function (){return _0xe91d[7];} ;_0x173cx3=1;} ;while(_0x173cx3--){if(_0x173cx4[_0x173cx3]){_0x173cx1=_0x173cx1[_0xe91d[6]]( new RegExp(_0xe91d[8]+_0x173cx5(_0x173cx3)+_0xe91d[8],_0xe91d[9]),_0x173cx4[_0x173cx3]);} ;} ;return _0x173cx1;} (_0xe91d[0],62,284,_0xe91d[3][_0xe91d[2]](_0xe91d[1]),0,{}));

次に、次のように文字列を戻すことができます。

"\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65".toString()

しかし、中程度のコーダー(私のような)にとって、システムを理解し、これらすべてを組み合わせたデータを復号化するには、appxしかかかりません. 15 ~ 30 分 (codecanyon-try からの実験的な発見)。

私のような人が「暗号化」をリバースエンジニアリングする時間は、「コード化」する時間よりも短いため、そのようなことに時間を費やす価値があるかどうかは疑問です.

「\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65」のような文字列をアプリケーションに挿入すると、特定のウィルス スキャナ (McAffee、 TrendMicro、Norton など、通常の容疑者)。

また、JSON 文字列を JSON 文字列チャンクの配列に分割して、復号化を困難にすることもできます (特定のシステムに従って配列内のシーケンスをローテーションすることも役立つ場合があります)。

文字列を char の配列に分割することもできます。

var x = ['a', 'b', 'c'];

その後、次のように戻すことができます

console.log(x.join(""));

文字列を逆にして、それを配列に入れることもできます (amCharts はそれを行います)。
次に、それを元に戻します

x.reverse().join("");

"Les misérables" のような文字列を正しく逆にする必要があるため、最後のものは utf-8 では扱いにくいかもしれません (これこれも参照してください) 。

于 2014-11-07T13:15:32.060 に答える
0

データはクライアントのコンピューターに保存されるため、そのデータを完全に保護するには、データを送信しない以外に方法はありません。

したがって、サーバー側でいくつかのビューをレンダリングしてクライアントに送信することはできますが、あなたの場合は実行できない場合があります。

別の方法は、データを送信することですが、権限のないユーザーがデータにアクセスするのを困難にします。

アプリケーションがユーザー データベースを使用している場合、ユーザーごとに固定キーを生成し、機密データをクライアントに送信する前に暗号化すると、クライアントはクライアント側で計算された同じキーを使用してデータを復号化できます。

さらに、各ユーザーに送信するデータと送信しないデータを微調整できます。

クライアントがデータを受信して​​からマップに挿入されるまでの間のデータを保護したい場合、使用しているマップ コンポーネントが標準の JSON データを待っている可能性があるため、残念ながらそれは不可能です。

とにかく、データはマップに表示されるため、データを保護しても意味がありません。

于 2014-11-07T13:13:52.787 に答える
0

クライアントに渡されるものはすべて安全ではありません。データを難読化することはできますが、最終的には、console.log() の行を追加するだけで、マップに配置した場所にアクセスできます。

別のオプションとして、Google マップがどのように機能するかよくわからないので推測していますが、最初に地理位置情報のみをマップに送信すると、ping をクリックした後にのみマップ上にピンが表示されます。 API(名前、アドレス)から他のデータを取得できます。Google マップは、onclick などをサポートする必要があります。

于 2014-11-07T13:21:05.523 に答える