- - PR -
runat=serverを使わずに動的なページを
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-07-03 17:00
ASP.NET 3.5 C# でウェブシステムを作成しています。
(当方、ウェブ開発経験はそれなりに長いのですが、ASP.NETもVSも初めてです) 他のウェブシステムへの自動ログイン機能でひっかかりました。 他サイトへのPOST遷移をしようというわけですが… (遷移先はCSRF対策されていないところなので、POSTさえできれば自動ログインできます) Javascriptが使用可能な状態ならば function autoSubmit(){ var form = document.getElementById('form1'); form.action="http://*************"; form.method="post"; var elem = document.getElementById("__VIEWSTATE"); elem.parentNode.removeChild(elem); elem = document.getElementById("__EVENTVALIDATION"); elem.parentNode.removeChild(elem); form.submit(); } をonloadさせることで成功しました。ユーザ名とパスワードはHiddenFieldに動的に設定しています。 さて、Javascriptが効いていない場合が問題です。 「自動で移動しない場合はこのボタンを押してください」とやろうにも、formのactionを(javascriptが)書き換えてくれていないのでポストバックされてしまうだけです。 server=runatでない、素のform上に動的な値(ユーザ名とパスワード)の設定ができればこの問題も解決なのですが、それは可能でしょうか? [ メッセージ編集済み 編集者: Sampo 編集日時 2008-07-03 17:01 ] | ||||
|
投稿日時: 2008-07-03 17:13
ちと、ユーザIDとパスワードをどのように持たせたいのかがよくわかりませんが、
formタグそのものを追加して利用することは可能ですよ。 | ||||
|
投稿日時: 2008-07-03 17:17
> どっとねっとふぁん様
<form id="autopost" action="http:/******" method="post"> <input type=hidden name="uid" value="*****" /> <input type=hidden name="pwd" value="*****" /> <input type=submit value="自動的にログインしない場合はここをクリック" /> </form> 実際に出力させたいHTMLはこんな感じです。 hiddenフィールドとしてユーザ名、パスワードを持たせたいわけです。 formタグそのものを追加するのは試してみましたが、ASPフォームでないので、中にHiddenFieldなどを配置できず、動的に値を設定できずに困っています。 | ||||
|
投稿日時: 2008-07-03 17:59
formタグの中にLiteralコントロールを置くのは大丈夫じゃなかったかな。
で、そのLiteralコントロールのTextに"<input type=hidden name="uid" value="*****" /> … "とかって文字列を設定すれば動くんじゃないかと。 | ||||
|
投稿日時: 2008-07-03 20:50
HtmlControl 置くのはダメなの?
form の入れ子はできないからなぁ。レンダリングのどこか、form の閉じタグを出したあとにグリグリ書くとか。 ページの view state を無効にすれば、ページの view state も消えるんじゃないかな? | ||||
|
投稿日時: 2008-07-04 09:26
出力するHTMLを、すべてコードで書くことができます。 | ||||
|
投稿日時: 2008-07-04 09:33
>どっとねっとふぁん様
Literal、置けません>< >Jitta様 HtmlControlというのはコントロールの一種でしょうか? パレットにないです… ちなみに、viewstateは全部オフにしても__VIEWSTATE, __EVENTVALIDATIONは消えてくれません。 (遷移先もASP.NETなので、これらがあると誤作動してしまうようです) >todo様 なるほど、直書きできますか! 何のためにASP.NET使ってるのかわからなくなりかねませんが、これで解決できそうです。ありがとうございました。 | ||||
|
投稿日時: 2008-07-04 12:13
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> 1ページ </div> </form> <form action=Default2.aspx method="post"> <asp:Literal ID="Literal1" runat="server"></asp:Literal> <input type="submit" value="送信" /> </form> </body> </html> こんなaspxページで protected void Page_Load(object sender, EventArgs e) { Literal1.Text = "<input type=hidden name=\"uid\" value=\"*****\" />"; } コードビハインドにこんな風に書いてとりあえず動きますけど。 そか、ViewStateの問題はあるか。。。 |