webページ間の引数の渡し方 お悩み

タグの編集
投稿者 nin  (社会人) 投稿日時 2014/7/26 11:24:10
毎度お世話になります
webページ間の引数の渡し方で悩んでおります

一応スマホ向けのスケジューラを作っているのですが、セルを選択した場合にリンク先に
転送させる部分は、完成しました
教えていただきましたLiteral.Textに動的にタグ文を記述して吐き出しています
日付は、urlの引数で渡していますが、idやpassをurlの引数で渡すと見え見栄状態
なので見せたくないのですが・・・・。
パソコン向けのスケジューラの場合は、ボタンを配置して Server.Transfer で飛ばして
PreviousPage プロパティを使用してソース ページの参照を取得して、FindControl メソッドを
呼び出して呼び出し元のラベルコントロールの値を取得していました
どうも根本的な認証の方法にも問題があるような気もしています・・。

毎度質問ばかりで恐縮ですが、よろしくお願いします

投稿者 るきお  (社会人) 投稿日時 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に動的に埋め込まれます。
投稿者 るきお  (社会人) 投稿日時 2014/7/27 13:32:35
補足

どうも長く書いているうちに少し趣旨が変わってしまいました。

自分で投稿を読み直して考えると、案3の独自トークンが一番良いように思います。
違う意見の人もいるかもしれません。

ベストプラクティスとして紹介していた、buttonタグを使う例は、実際にやるといろいろ問題がでてくるはずです。解決できない問題ではないと思いますが、「ベストプラクティス」といえるものではありません。

本体はコントロールを使用して、ButtonやLinkButtonを使っていればこのような悩みは出ないので、構造を見直してみるのも良いです。
GridViewコントロールやRepeaterコントロールを使ってもっと大掛かりな仕掛けを作りこむこともできます。

なお、Server.Transferでの情報受け渡しはContext.Itemsが簡単です。
Transfer前に渡したい情報をセットしておいて、Transfer後にセットした情報を取得します。

投稿者 nin  (社会人) 投稿日時 2014/7/27 20:09:55
るきお様

毎度ご教授ありがとうございます。
素人のじじいにはとっては、なかなか難しいですね・・・ ますます毛がなくなりそうです。
まず、教えて頂いたセッションIDの件は、これから試してみようと思います

推奨のトークンの方法がんんんんです
素人考えでは、
何かキーをページに埋め込んでおく。
id passをキーで暗号化して、urlに埋める。
キーは、30分間隔程度で入れ替える
30分間以上のリロード間隔を稼ぐため、復号化する際は、今回キー及び、前回キー
両方で復号化を行う
一旦認証が終われば、後は、上記のセッションIDで識別でいいでしょうかね?

スマホの場合は、外部からのアクセスになるので、かなり面倒なことに・・。
一応、ファイアウォールを設置
DMZ上にWebサーバを設置し、スマホ向けのaspを乗せる
別セグメントにある、MS-SQLサーバに接続して利用
Webサーバは、ADに参加させず、MS-SQLサーバのみへのアクセス権に限定
スマホ向けページにアクセスするには、Webサーバの機能でIDとパスワードを要求
(これは、会社で共通で利用)
その後、個人認証と識別の為、個人ID PASSを入力 MS-SQLサーバの内容と照合

てな感じで考えていますが、どうなることやら。




投稿者 nin  (社会人) 投稿日時 2014/8/1 17:10:59
お世話になります
ひとまず認証については、websever の認証を使うことにしまいた
Webconfigにセションの記述を追加したところエラーとなり解決出来ていません
多少見えるのは、諦めました
sslを搭載しようと思っています
フリーの認証サーバーがあったのですが、登録に際して、登録ドメイン名の
メールアドレスが必要で、今のところメールサーバを立てていないので
独自認証でいいかと考えています。
一般公開するわけでもないので、警告でてもいいか。。。。。。