サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
surferonwww.info
ASP.NET と IIS には要求のサイズを制限する組み込みのセキュリティ機能があります。httpRuntime 要素の maxRequestLength 属性と requestLimits 要素の maxAllowedContentLength 属性が良く知られています。 それ以外に serverRuntime 要素の uploadReadAheadSize 属性というのもあって、それに気が付かないでハマるということがありましたので、備忘録としてまとめて書いておきます。元の話は Teratail のスレッド「asp.net ajax upload でエラーになる」です。 (1) httpRuntime 要素の maxRequestLength 属性 ASP.NET の制限でデフォルトで 4MB になっています。詳しくは Microsoft のドキュメント httpRuntime 要素
IIS7 以降で利用できる 統合パイプラインモードでは、ASP.NET が扱うことができる最大要求数は、requestQueueLimit(デフォルトで 5,000)で決まるという話を書きます。 この件に関して自分が参考にした Microsoft のサイトの記事は以下のとおりです。これらをベースに話をします。 <applicationPool> 要素 (Web 設定) ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0 IIS 7 での ASP.NET 2.0 の互換性に影響する変更点 なお、統合パイプラインモードかクラッシックモードかによって話が違ってきます。ASP.NET のバージョンによっても話が違ってきます。以下の話は統合パイプラインモードで ASP.NET 2.0 以降のバージョンの場合ですのでご注意ください。 (クラシック
ActiveX の WebBrowser コントロール (SHDocVw.dll) を .NET Windows Forms アプリで扱おうとしてかなりハマったので、再びそのようなことがないよう備忘録を残しておきます。 .NET Framework 2.0 以降では、SHDocVw.dll のマネージラッパーである WebBrowser コントロール が提供されていますので、.NET Windows Forms アプリで SHDocVw.dll を扱うことはあまりないかもしれませんが、公開されてないイベントを利用したい場合などは困ります。 マネージラッパーの WebBrowser を拡張する方法(Extended .NET 2.0 WebBrowser Control 参照)もあるようですが、今回の目的(target="_blank" のリンクをクリックすると、セッションを維持して、上の画
先日 秋葉原に行って買ってきた Crucial の MX100 シリーズ 512GB SSD を、OS が Vista のデスクトップ PC の 500GB HDD と置き換えましたので、その顛末を書いておきます。 デスクトップ PC は HP の記事 に書きましたように 2007 年 12 月に作った古いものです。その後、マザーボード、グラフィックスカード、電源などを交換しましたが、基本的な性能は変わっていません。 そのような古い PC に最新の SSD を使っても性能を生かしきれないんですよね。特にマザーボード(Intel P45 + ICH10R チップセット搭載)に SATA3 (6 Gbit/s) ポートがなく、SATA2 (3 Gbit/s) ポートしかないことが性能上のボトルネックになります。 例えば、今回購入した SSD のシーケンシャルリードは 550MB/s、シーケンシ
サンデープログラマーの自分が、作成したアセンブリに厳密名を付けることはないですが、わけあって厳密名の付け方についていろいろ調べましたので、備忘録として書いておきます。 まず、厳密名 (Strong Name) とは何かですが、MSDN ライブラリ 厳密な名前付きアセンブリ によると「単純テキスト名(アセンブリ名)、バージョン番号、カルチャ情報から成るアセンブリの識別子と、公開キーおよびデジタル署名」だそうです。 web.config で、ライブラリへの参照や HTTP モジュールの参照を設定する際以下のようにしますが、これが厳密名を指定したことになるようです。 <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> <add name="ScriptMo
JavaScript を使って textarea のキャレット(カーソル)位置に文字列を挿入するサンプルです。 挿入する文字列を入力するために jQuery UI の dialog を利用していますが、それ以外は JavaScript のみを使用しています。 Firefox などの場合は、選択された部分の先頭、末尾の index (整数型)を、それぞれ selectionStart、selectionEnd で取得できますが、IE の場合はそれに該当するプロパティがないのが問題です。 IE の場合は、document.selection プロパティで selection オブジェクト(textarea 要素そのものではなく、textarea 要素の中の選択された文字の部分)を取得し、さらに createRange メソッドを使って TextRange オブジェクトを作成し、それを操作するこ
github というサイトの Grid というページに紹介されている JavaScript(jQuery ではない)と CSS を利用して、GridView のヘッダと列を固定する例の紹介です。 先の記事「GridView のヘッダ、列を固定」で、CSS の Internet Explorer (IE) 独自実装である expression 関数を使ってテーブルのヘッダと列を固定する例を書きました。 しかしながら、expression 関数のサポートは終了していて IE でも互換モードでないと動きませんし、IE の独自実装なので、当然、Firefox など他のブラウザでは動きませんので、あまり使い道はありません。 2017/8/16 注記追加 Windows 10 IE11 では Quirks モード(IE5 相当)にしても expression 関数が働かないようです。いつそうなったのか
クッキーは同名でもパスが違うと別々に保存されるようです。実は、同じ名前を付けると上書きされると誤解していて、先日、半日ぐらいハマってしまいました。(笑) クッキーについては ASP.NET Cookies Overview に詳しく書いてあって、参考にしていましたが、そのあたりのことは書いてないんですよね。(逆に、名前は一意で、同じだと上書きされると書いてあったりします) クッキーはサーバーからの応答ヘッダーの Set-Cookie: で指定してブラウザに保存させる手段と、クライアントスクリプトの document.cookie で設定する手段があります。 ASP.NET で、サーバー側から応答ヘッダーの Set-Cookie: を使ってクッキーを設定する場合は以下のようにします。 HttpCookie aCookie = new HttpCookie("TestCookie"); aCo
SQL Server の既定のインスタンスに接続するためには、まず当該 DB をデータベースエンジンにアタッチしなければなりません。無知な素人(自分のこと)は、たぶんここでハマります。また時間を無駄にすることがないように備忘録を残しておきます。 ポイントは ACL の設定です。アタッチする前に、SQL Server のサービスアカウントに、データ/ログファイル (.mdf, .ldf) があるフォルダに対するフルコントロール権限を与えることが必要です。 そのことは、MSDN ライブラリ「Windows サービス アカウントの設定」(SQL Server 2005 の記事ですが、このあたりは最新版でも同じ)に書いてあったのですが、隅っこのほうに小さく書いてあって気がつくのにかなり時間がかかりました。(笑) 「SQL Server サービスに対する Windows 権限の確認」のセクションに以
プログラマが、ASP.NET が自動生成する __doPostBack という名前の JavaScript 関数を、直接自分のコードに使ってはいけないという話です。 ASP.NET には、クライアントのイベントでサーバーにデータをポストバックするための、クライアントスクリプトを自動生成する機能があります。 それが表題の __doPostBack という名前の JavaScript の関数です。 例えば、GridView で、AutoGenerateSelectButton プロパティを true に設定すると[選択]ボタンが表示されますが、そのハイパーリンクに __doPostBack 関数が以下のように自動的に設定されます(ASP.NET 4 では ' はエスケープされて ' になります)。 <td> <a href="javascript:__doPostBack('GridV
先日、秋葉原に行った時 に Intel 製 330 シリーズ 120GB SSD を買ってきました。これを Gateway のノート PC の 100GB HDD と置き換えましたので、その顛末(トラブル)と結果(はたして爆速になったか?)を書いておきます。 まず、作業を始める前に、付属の CD-ROM にある「取り付けガイド」を一読することをお勧めします。インテルの Web サイトでも同様な情報は入手できますが、情報が古かったりします。この記事を書いている時点では、最適化ツール(インテル SSD ツールボックス)の情報が、Web サイトのものは古かったです。 (1) SSD を PC に接続 最初の作業は、既存の HDD から、OS を含めすべてのデータを SSD に移行する(要するに、既存 HDD のクローンを SSD に作成する)ことですが、そのためには SSD をノート PC に接
ということは、サーバーが受信した文字列を UTF-8 として解釈する場合(ASP.NET のデフォルト)、上記のブラウザのうち Chrome しかクエリ文字列を正しく送信できないということになるようです。 では、アドレスバー直打ちではなく、以下のようなハイパーリンクをクリックするとブラウザはどのような要求をサーバーに送るでしょうか? <a href="default.aspx?data=日本語">リンク</a> IE は文字コードのバイト列を生のまま送ります。例えば、"日本語" というクエリ文字列の場合、ハイパーリンクのあるページのエンコーディングが Shift_JIS なら 93 fa 96 7b 8c ea、UTF-8 なら e6 97 a5 e6 9c ac e8 aa 9e となります。 Firfox と Chrome は URL エンコードしてから送ります。ただし、Shift_J
ユーザー入力に <script> のような文字を許可するために、web.config の pages 要素または個々のページの @ Page ディレクティブで ValidateRequest="false" に設定することがあると思います。 ASP.NET 3.5 以前の場合はそれだけで <script> のような文字入力を許可できましたが、ASP.NET 4 では、それだけでは以下の画面のように HttpRequestValidationException がスローされてしまいます。 ASP.NET 4 ではセキュリティ強化のため、デフォルトで、BeginRequest の前に検証を有効にしているそうです。その結果、aspx ページ要求のみでなく、ASP.NET のすべてのリソースの要求(例えば、クッキー、Web サービスやカスタム HTTP ハンドラによる要求、カスタム HTTP モジ
インジェクションアタックに対するセキュリティ対策のため、ASP.NET 2.0 からコントロールにイベント検証の機能が追加されています。ポストバック処理の際、クライアントから POST された値を検証し、未知の値の場合は以下のように ArgumentException をスローします。 無効なポストバックまたはコールバック引数です。イベントの検証は、構成の <pages enableEventValidation="true"/>、またはページの <%@ Page EnableEventValidation="true" %> を使用して有効にされます。セキュリティの目的により、この機能は、イベントをポストバックまたはコールバックする引数が、それらを最初に表示したサーバー コントロールから発行されていることを確認します。データが有効であり、予期されている場合、検証のためのポストバックまたは
クエリをパラメータ化するというのはリテラルの部分をプレースホルダを使って記述することです。上記の SELECT クエリの例では以下のようになります。 SELECT id, Product FROM TableA WHERE Category=@Category プレースホルダの構文はデータソースに依存します。SQL Server の場合は @parametername 形式の名前付きパラメータが使用されます。(頭に @ を付けるのは単なる命名規則です) パラメータ名は必ずしも識別子と同じ名前にする必要はありませんが、同じにしておいた方が混乱がなさそうです。(例えば、識別子の名前が Category ならパラメータ名は @Category とする) ADO.NET のコマンドオブジェクトは、パラメータを使用して SQL ステートメントまたはストアドプロシージャに値を渡すことを可能にしています
あまり役に立たないかもしれませんが、ASP.NET 標準の Forms 認証システムで、認証チケットが期限切れになっているかどうかを判定するという話です。なお、前提条件としてクッキーが有効になっていることを想定しています。 例えば、一旦認証を受けたユーザーが、ログオフせず、ブラウザを立ち上げたまま、長時間席を外すなどして、タイムアウトに設定した時間を超えてアクセスしなかった場合を考えてください。 ユーザーが席に戻ってきて再度アクセスした場合、アクセスしたページに匿名アクセスを許可してなければ、ログインページにリダイレクトされるというのが Forms 認証の通常の設定です。 そこで、ユーザーに認証チケットが期限切れとなっていることを知らせるにはどうしたらいいでしょうか? User.Identity.IsAuthenticated ではダメです。認証されているか否かは判定できますが、認証チケッ
上記の結果は、最初にこの記事を書いた 2011 年 3 月 20 日の時点で検証に使ったブラウザ IE8, Firefox 3.6.15, Chrome 10.0.648.151, Safari 5.0.4, Opera 11.01 でも、この記事を改版した 2014 年 3 月 2 日の時点で検証に使ったブラウザ IE9, Firefox 27.0.1, Chrome 33.0.1750.117, Safari 5.1.7, Opera 12.16 でも同じでした。 Firefox と Safari の場合は、UrlEncode するのはダメで、%e6%97%a5%e6%9c%ac%e8%aa%9e.xls のようなエンコードされた名前になってしまいます。Chrome と Opera は UrlEncode 有り/無しどちらも OK でした。 また、IE の場合でも、ファイル名に半角空白
注意: 今頃になって何ですが、 jQuery Ajax の仕様が変わって、バージョン 1.5 以降では dataFilter に指定したメソッドで JSON 文字列を JavaScript オブジェクトにパースできなくなりました。詳しい説明はこの記事の下の方にある「2013/8/9 追記」を見てください。 先の記事 ASP.NET AJAX と Web サービス では、AJAX 対応 ASP.NET Web ページから Web サービスにアクセスする例を書きましたが、この記事では jQuery を使って AJAX 通信を行う例を書きます。 ASP.NET .aspx ファイルでない Web ページでは、ScriptManager コントロールを使用できません。従って、先の記事に書きましたプロキシクラスは利用できません。 この記事では、静的な html ページから、jQuery を使った A
MSDN フォーラムで、名前などの入力項目に携帯の絵文字を入力させないように、以下のステップで対応したいという話がありました。 ユーザーのキャリアを判定 キャリア別に入力の絵文字をチェック 絵文字が含まれていればエラー表示 フォーラムでは、このうち 2 番目のステップについて議論があり、自分が提案した方法でうまくいったそうですので、その内容を書いておきます。 ASP.NET の Web アプリのサーバー側のプログラムでは文字列は Unicode で扱われるので、絵文字に該当する Unicode 文字が分かれば、正規表現を使ってチェックできるはずです。 Wikipedia のページ 携帯電話の絵文字 によると、各キャリアの絵文字の Unicode 表現は以下のとおりとのことです。 au: E468-E5DF, EA80-EB88 DoCoMo: E63E-E6A5, E6AC-E6AE, E
このページを最初にブックマークしてみませんか?
『surferonwww.info』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く