投稿者 るきお  (社会人) 投稿日時 2014/7/27 13:07:24
アクセスしてきた人を識別して、かつそれが正規のアクセスであることを保証されようとしていますね?

ninさんがおっしゃるように認証の問題であるように思います。

解決方法はいろいろあると思いますが、私が考えるベストプラクティスを紹介します。

・リンク先に遷移するためにaタグではなく、buttonタグを使用します。buttonタグはtype属性をsubmitにして、GETではなく、POSTでアクセスするようにします。(inputのsubmitでも良いです。)
・サーバー側では認証を実装し、ユーザーを識別します。
もし、可能であるならば、セッションIDで識別しても良いです。。

認証の実装は条件によって代わりますが、Active Directoryで管理されている組織内であればIISで基本認証を有効にするだけでできます。プログラム内ではUser.Identityでユーザー情報を取得します。

セッションIDでのユーザーの識別が可能な場合は、IIS等の設定によらず、単にプログラム内でSession.SessionIDを確認することでアクセスを識別できます。一連の同一アクセスは同じセッションIDになります。

そのほか、あまりお勧めではありませんが、思いついた案です。
案2:情報を暗号化します。

現状とほとんど同じですがURLに含まれるIDやPassを暗号化します。
プログラム内でIDやPassを使用するときは復号化します。

この案2は、セキュリティ上のリスクが許容できることがわかっている組織内でのみ使用してください。
暗号化したからといって100%安全ではありません。

暗号化の方法はいろいろありますが、たとえば、System.Security.Cryptography.AesManagedクラスを使用します。

案3:独自のトークンで識別を行います。

URLにidやpass自体を含めるのではなく、アクセスを識別する文字列(=ト-クン)をそのつど生成して使用します。
この方法はidやpassを直接使用するより安全です。
トークンを処理ごとに作成するようにすれば、万一流失しても悪用されないからです。


案4:URLでセッションを識別します。

セッションの設定を変えれば現状でもセッションIDを利用できます。

その方法。
<system.web>
    <sessionState cookieless="true" />
</system.web>


ただ、この方法ではセッションを識別するための情報がURLに動的に埋め込まれます。