- PR -

runat=serverを使わずに動的なページを

投稿者投稿内容
Sampo
会議室デビュー日: 2008/07/03
投稿数: 18
投稿日時: 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 ]
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-07-03 17:13
ちと、ユーザIDとパスワードをどのように持たせたいのかがよくわかりませんが、
formタグそのものを追加して利用することは可能ですよ。
Sampo
会議室デビュー日: 2008/07/03
投稿数: 18
投稿日時: 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などを配置できず、動的に値を設定できずに困っています。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-07-03 17:59
formタグの中にLiteralコントロールを置くのは大丈夫じゃなかったかな。
で、そのLiteralコントロールのTextに"<input type=hidden name="uid" value="*****" /> … "とかって文字列を設定すれば動くんじゃないかと。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-07-03 20:50
HtmlControl 置くのはダメなの?

form の入れ子はできないからなぁ。レンダリングのどこか、form の閉じタグを出したあとにグリグリ書くとか。
ページの view state を無効にすれば、ページの view state も消えるんじゃないかな?
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2008-07-04 09:26
コード:
Response.Clear();
Response.Write("実際に出力させたいHTML");
Response.End();			



出力するHTMLを、すべてコードで書くことができます。
Sampo
会議室デビュー日: 2008/07/03
投稿数: 18
投稿日時: 2008-07-04 09:33
>どっとねっとふぁん様

Literal、置けません><

>Jitta様

HtmlControlというのはコントロールの一種でしょうか? パレットにないです…
ちなみに、viewstateは全部オフにしても__VIEWSTATE, __EVENTVALIDATIONは消えてくれません。
(遷移先もASP.NETなので、これらがあると誤作動してしまうようです)

>todo様

なるほど、直書きできますか!
何のためにASP.NET使ってるのかわからなくなりかねませんが、これで解決できそうです。ありがとうございました。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 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の問題はあるか。。。

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