2017-09-21 4 views
0

これは私のURLです: URLにAngularjsデータが含まれていると、自分のURLを暗号化するにはどうすればよいですか?

<a class="btn btn-success btn-sm btn-block" href="@Url.Action("myAction", "myController")?Id={{repeat.Id}}&HistoryId={{repeat.HistoryId}}" ng-cloak>View History</a>

私はちょうど私がURLを暗号化しない方法を知りたいです。助けてください。

+1

まず、URLから機密データを送信する理由を教えてください。あなたはPOST呼び出しをうまくやることができます。 –

+0

出力を提供してください –

+0

@ Alexandru-IonutMihaiどの出力? – D3adman

答えて

1

あなたは2つの回避策を試すことができます:通常全体ではなくURLのデータを暗号化する

1)は十分すぎるほど、少ない複雑です。角度メソッドを構築するときは、URLに割り当てる前にIDを暗号化する必要があります。これにより、IDは暗号化され、誰も実際のIDを見ることはできません。 URLがクリックされているときは、処理する前にバックエンドのURLを復号化する必要があります。

2)何らかの理由でアンカーのURL全体を暗号化する必要がある場合は、$document.readyで行うことができます。ハイパーリンクのIDを割り当てます。 DOMがロードされ、document.readyが呼び出されると、ajaxを使用してアンカーの完全なURLをバックエンドに送信して暗号化を実行する必要があります。その後、アヤックスの成功で、アンカー

$ajax. 
    ... 
    success: function (data) { 
    $("#myHyperLink").attr("href", data.EncryptedURL) 
    } 

しかし、このアプローチを使用して暗号化されたURLを追加し、あなたはそれ以外のブラウザではどこでもにリダイレクトすることはできません、別途そのアンカーのクリックを処理する必要があります。

可能であれば、代わりにPOSTメソッドを使用してください

+0

これはすべて素晴らしいですが、誰かがあなたのウェブサイトをハックしようとすると、定期的なユーザーである必要があります。彼らはまだデバッグツールを手に入れ、id値を暗号化して、それが何であるかを見る前にブレークポイントを置くことができます。彼らはコンソールを起動し、あなたが望むどんなIDでもあなたの暗号化メソッドを呼び出して、彼らが望む任意のURLを再構築することができます。これがあなたの唯一の保護方法であれば、あなたは本当に安全ではありません。 –

-1

まず、HTMLテンプレートをCSHTMLに変換し、Razor構文を使用する必要があります(Angularルートを更新することを忘れないでください)。

あなたがあなたのクエリ文字列パラメータをencrypか、エンコードするために、サーバー側のヘルパーを使用することができることをやったら:

<a class="btn btn-success btn-sm btn-block" href="@Url.Action("myAction", "myController")?Id={{@Url.Encode(repeat.Id)}}&HistoryId={{@Url.Encode(repeat.HistoryId)}}" ng-cloak>View History</a> 

あなたが本当にそれを暗号化する場合は、あなたがHTMLヘルパーを作成する必要があります使用する暗号化アルゴリズム(SHA256、AES、DES(推奨しません)など)に応じて、ページの暗号化を行います。

+0

本当にURLを暗号化する方法を紹介するのに役立つリンクを教えてもらえますか?私はこのことにとても新しいので、理解するのは難しいです。 – D3adman

+0

@ D3adman、なぜ暗号化されたURLが必要ですか?あなたのパラメータはIDだけです。 'encodeURIComponent'関数を見てください:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent –

+0

@ Alexandru-IonutMihai私のプロジェクトの要件の1つです。私はすべてを暗号化しなければならない。 – D3adman

1

データのビットを保護したい場合は、URLに入れないでください。HTTPSでPOST要求を使用して、本体が暗号化されるようにします。しかし、すべてがクライアント側で発生するので、重要な値を公開しないように注意する必要があります。誰でもF12を押して、JavaScriptコードのどこかでデバッガを使用して、何が起こっているのか、どのような値を持っているのかを確認できます。

クライアント側の何も安全でないと常に仮定します。最良のアイデアは、重要なIDを直接公開することではありません。あなたはこれらのフィールドを持つSQLテーブルにデータを持っている想像:

ID - int型、 名 - varchar型

あなたがIDを公開する場合は、人々が簡単にヒットするあなたのAPIへのリクエストを発行し、そのIDを順次変更することができます彼らは想定されていないデータです。

テーブル定義に余分なフィールドを追加すると、GUIDタイプのPublicIDが呼び出されます。これはURLで公開されているものであり、すべてが世界で再び有効です。サーバー側では、これらの新しいIDを取得するためにデータレイヤーを少し変更し、実際のIDを取り出して必要な処理を行います。この方法で内部IDを保護し、それらを公開することはなく、誰もGUIDを推測できず、逐次ではないため、常に安全です。

作成メソッドがあると仮定すると、作成時にこれらの新しいIDにGuid.NewGuid()呼び出しを単に挿入します。

私はこれを十分に強調することはできません。クライアント側で公開するものは何でも安全です。最高のアイデアは、人々が知りたくないことを公開しないでください。

関連する問題