- PR -

JavaScriptを使用せずにリンクをSUBMITする方法

投稿者投稿内容
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2004-02-27 14:53
# めっちゃ久々に書いてみる。

まず、JavaScriptを使わずテキストリンクでPOSTはできません。
するとGETしか方法が無くなります。

ここでGETだとパラメータが生になってしまうので
セキュア的によろしくないということであれば、
パラメータを暗号化すれば済みます。
# POST にしたって、sniff すりゃ中身丸見えですし。

疑似コードを使います。

ページ生成側:
<a href="target.asp?key=<%= encode(商品1コード) %>">商品1</a>

受け取り側(target.asp):
rawkey = decode(getHttpParam("key"));

こんだけ。あとは rawkey の正当性を検査。
encode/decode は各種汎用暗号化ルーチンを使うとよいかと。

GETを使う時に出る問題点としては、ブックマークからの直ジャンプがあります。
これはsessionなりRefererなりRedirectなりを使えば解決かな?

URIの長さは、一般的な携帯端末では全部で512bytesぐらいまでは可能ですが、
ごく一部の古い端末では128bytes制限があったりします。
その辺は端末依存なのでなんとも。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-02-27 14:56
ほむらです。
--------
GOLF@スポコン氏へ
引用:

何をしたいかといいますと。
ターゲット層がみえない、WEBの検索システムを作成する事です。
規約:全ページアクセシブルであること(誰もが見れるページ)
   JavaScriptを使えない端末でも可能

ページはASPを使用し動的に作成を行う。

以上です。


JavaScriptを使用できない端末ってのは、JavaScriptをOFFにした端末と
同じですよね?

JavaScriptが使用できないって事はVBScriptも無理ですね。。


○やりたっかた事
商品の一覧画面があり、その商品名はテキストリンクです。
その商品名をクリックしますと、コードを引数にして、
商品の詳細画面へ遷移し、画面を表示すると言った事です。
GETでも可能かと思いますが、セキュリティー、バイト制限等がありますので
却下されました。

その他にも検索画面があり、その検索条件も持っていかないと駄目な事あり
難しくなってきました。


GETでも可能なように再度交渉すべき点だと思います。
GET METHODのデータをPOSTMethodのデータに変更したところで
セキュリティ上大して上がったとはいえません。

そもそも、<A>はリンクを張るためのものであってデータを送るための要素ではありません。
データを送る行為そのものがイレギュラーだと思います。
POSTを送るなんて仕様はどこにもないのではないでしょうか。
言ってみればメモ帳でマシン語を書く努力をしているようなものです。

なので僕としては。。。
1.検索画面では<form>を使わしてもらい<input>でsubmit()する。
2.商品のアンカーについてはサーバー側で暗号化したデータをリンク情報として付加して
  PATH_INFOで送ってしまう。
  Servletと違って拡張子があるからばれてしまうかもしれませんが
  少なくとも簡単には正規のデータを送れなくなるはずです。

------
BBコード失敗したので修正。
しかも、タブっている事に気が付く。
しかも、ブックマークのことは微塵も考えてなかった(笑


[ メッセージ編集済み 編集者: ほむら 編集日時 2004-02-27 15:01 ]
dai
ベテラン
会議室デビュー日: 2001/08/28
投稿数: 85
投稿日時: 2004-02-27 15:00
元の話に戻りますが、テキストリンクでJavaScriptを使わずにPOSTするということをしようとすると、実現方法をひとつ思い浮かびました。
テキストから画像を作成します。

例:
<INPUT type="IMAGE" src="foo.asp?text=Product+Name">
→ "Product Name" というテキストが書かれた "画像" のボタン

負荷だとか、サーバー側に画像のキャッシングだとか考えないといけませんが、
どうしてもPOSTする必要があればこれくらいしかやりようは無いでしょう。
#携帯だとPOSTで送る文字バイトにも制限があるかもしれませんが。

携帯だとかを視野に入れると、ASP.NET Mobile Control / Mobile Internet Toolkit などの使用を考えたほうが良いかもしれません。
ただし、PDA端末や、携帯でもUIの利便性やデザインフィーリングを高めようとすると、個々のページを端末用に分けることになります。

http://host/
http://host/i/
http://host/j/

こんな感じに分かれてるサイトがたくさんありますよね。
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2004-02-29 04:16
引用:

daiさんの書き込み (2004-02-27 15:00) より:
<INPUT type="IMAGE" src="foo.asp?text=Product+Name">
→ "Product Name" というテキストが書かれた "画像" のボタン
じに分かれてるサイトがたくさんありますよね。



ページ読み込み後(だか並行だかは実装依存ですが)、インラインで画像を読み込む瞬間にfoo.aspにリクエストが行くので意味ないのでは。
ここでやりたいことは、ユーザがページのどの部分を選択したかをサーバに伝えたいわけですから。

---
ひとつ思いつきました。

生コードがクライアント側に送られるのが問題なのですから、ページを生成する前に、生コードそれぞれに一対一の(ランダムな)値を仮コードとして割り付け、それをセッションにひもづけて保存、サーバは受け取った仮コードとセッション上の対応表から元コードを割り出す。
まぁ、別にランダムでなくとも、クライアントに送信する順番でもいいのですが。

問題は、受け取った側で仮対応表を破棄しないとメモリを食い続けるとか、backしてリポストした場合に対応表がobsoleteになっていて不整合が起こる可能性があるとか。
dai
ベテラン
会議室デビュー日: 2001/08/28
投稿数: 85
投稿日時: 2004-03-01 13:44
伝わらなかったようなので、1点だけ。

> ページ読み込み後(だか並行だかは実装依存ですが)、インラインで画像を読み込む瞬間にfoo.aspにリクエストが行くので意味ないのでは。

テキストリンクにする代わりに、INPUT の画像にしましょうというのが案です。
画像を取得するだけのfoo.aspなので、ここはGETになってます。

> ここでやりたいことは、ユーザがページのどの部分を選択したかをサーバに伝えたいわけですから。

テキストのように見えるINPUT画像ができたのですから、
後はPOSTで好きなようにデータを送れますね、と。
GOLF@スポコン
常連さん
会議室デビュー日: 2003/11/26
投稿数: 30
投稿日時: 2004-03-05 09:08
皆様ありがとうございました。

結局
お客さんは「JavaScriptを使用しない。」
「GETメソッドを使用する」といった仕様になりました。
それにあたっての画面修正、規制等は了承していただけましたの
開発はできそうです。

ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)