ASP.NET高級プログラミング基礎第七編—開発原則2

14530 ワード

前言:このブログから私达はウェブ开発の原则を绍介して2、更に前章のブログの中で私达は主にいくつかの基本的なウェブ开発の原则を言って、この私达は前編の基础の上で深く说明します.
  • クライアント検証は、サービス側検証
  • に代わるものではない.
    (1)では、onclickはサービス側イベントであり、onclientClickはクライアントブラウザに最終的に生成されるonclickイベントである.
    (2)引き出し金額が100元を超えないように設定する
    1)クライアント:

    2)サーバー側:Label 1.Text=「引き出し成功、金額:」+TextBox 1.Text;
    (3)JavaScriptを無効にする場合(Internetオプション->セキュリティ->カスタムレベル->スクリプト->アクティブスクリプト->無効にすると、クライアントJavaScriptチェックが無効になり、100元以上のお金を引き出すことができます).
    (4)サービス側でもデータ検証を行う.
    (5)クライアント検証はクライアント体験を良くするためであり、サービス側検証は最後のチェックであり、悪意のある要求を防止し、後述ASP.NET ValidationはASP.NETに内蔵されたデータ検証技術は、クライアント側とサーバ側で同時に検証されます.
    注意:Webページを新規作成し、TextBoxコントロール、Buttonコントロール、Labelコントロールをドラッグ&ドロップします.Buttonコントロールのコードは次のとおりです.

    Buttonコントロールのイベントの下に次のコードを書きます.
     1     protected void Button1_Click(object sender, EventArgs e)
     2 
     3     {
     4 
     5         if (Convert.ToInt32(TextBox1.Text) > 100)
     6 
     7         {
     8 
     9             Label1.Text = "        100 ";
    10 
    11         }
    12 
    13         else
    14 
    15         {
    16 
    17             Label1.Text = "" + TextBox1.Text;
    18 
    19         }
    20 
    21     }

     
  • 機密データをブラウザ側
  • に書かないでください.
    (1)簡単な例を挙げて説明する.
     1  <script src="../script/jquery-1.4.1.min.js" type="text/javascript"></script>
     2 
     3     <script type="text/jscript">
     4 
     5         $("#btnLogin").click(function () {
     6 
     7             if ($("#UserName").val() == "admin" && $("#Password").val() == "citsoft") {
     8 
     9                 alert("    ");
    10 
    11             }
    12 
    13             else {
    14 
    15                 alert("    ");
    16 
    17             }
    18 
    19         });
    20 
    21 </script>

     
    (2)ユーザがブラウザでソースコードを見ると,ユーザ名,パスワードが何であるか,動的サイト空間がまだ少ない時代には,多くの人のホームページがこの方法で実現されていた.
  • 機密情報をHTMLに隠さないでください
  • (1)サービス側制御パスワードが間違っていればVisible=False,サービス側制御のHyperLink 1.Visible=falseはクライアントにはまったく出力されず、Jqueryなどと結合する際に$("#コントロールID")は使えない.Show()は、Htmlにレンダリングされていないため、visible=falseのコントロールを表示します.
    (2)1ページでチェックするのではなく,機密ページが開く前に権限チェックを行うべきであり,正しく機密ページに導かれていれば,正しくなければ導かれない.
    (3)パスワード入力が正しい場合のみダウンロードアドレスが表示され、実装コードは以下の通りである.
    注意:新しいダウンロードページを作成します.aspx、純JavaScriptコードをインポート:
     1 <body>
     2 
     3     <form id="form1" runat="server">
     4 
     5     <div>
     6 
     7         <input type="text" id="Password" />
     8 
     9         <input type="button" value="  " onclick="var passwordID=document.getElementById('Password').value; if(Password=='111'){document.getElementById('div1').style.display='';}" />
    10 
    11         <div id="div1" style="display:none"><a href="http://www.cnblogs.com/hanyinglong.zip">    </a></div>
    12 
    13         <br />
    14 
    15         <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    16 
    17         <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
    18 
    19         <br />
    20 
    21         <asp:HyperLink ID="HyperLink1" runat="server"
    22 
    23             NavigateUrl="http://www.cnblogs.com/hanyinglong.zip" Visible="False">    </asp:HyperLink>
    24 
    25     </div>
    26 
    27     </form>
    28 
    29 </body>

     
    Buttonコントロールのイベントの下に次のコードを書きます.
       
     1  protected void Button1_Click(object sender, EventArgs e)
     2 
     3     {
     4 
     5         if (TextBox1.Text == "111")
     6 
     7         {
     8 
     9             HyperLink1.Visible = true;
    10 
    11         }
    12 
    13     }

     
  • XSS脆弱性
  • (1)ユーザが提出したデータを軽々しく信用してはならない.
    (2)alertメッセージは見苦しいので、メッセージShowMessageを統一的に表示するためのashxページを開発する.ashx.
    1 context.Response.ContentType = "text/html";       
    2 
    3 context.Response.Write("<center><font color='red'>" + context.Request["msg"] + "</font></center>");
    4 
    5  context.Response.Write("<a href='javascript:history.back();'>     </a>");

     
    (3)システム内部でメッセージをポップアップする必要がある場合は,ユーザのRedirectをShowMessage.ashx?Msg=’メッセージ’で、例えば:
    Response.Redirect(「ShowMessage.ashx?Msg=ユーザー名は空にできません」);
    (4)投稿フォルダを新規作成し、フォルダにviewを付ける.aspxとass.aspxページ、まず
     1)add.aspxでTextBoxとButtonコントロールをドラッグ&ドロップし、TextBoxのTextMode="Multiline"を設定し、Buttonコントロールをダブルクリックしてイベントの下に次のコードを書きます.ValidateRequest="false"
     File.AppendAllText("c:/1.txt", TextBox1.Text + "
    ");
    2)View.aspxページに次のコードを追加します.
      //Response.Write(File.ReadAllText("c:/1.txt"));
       Response.Write(HttpUtility.HtmlEncode(File.ReadAllText("c:/1.txt")));
    注:ファイルにalert(‘韓迎龍のブログ園に行こう!’);
    (5)要求データを検出することができ、要求データベースに<等があると悪意のある要求とみなし、提出を禁止するaspxはデフォルトでこのようなポリシーを採用している.このような欠点は、プログラマーフォーラムであれば、プログラマーはHTMLコードの投稿を発表できないため、より良い処理ポリシーは、ユーザーが発表した内容をそのまま表示し、HttpUtilityを使用することである.HtmlEncodingは文字列の<,/などの特殊記号をHTML表示の文字に変換することができ、すなわちを定義スクリプトのラベルではなく、"<script>”,これにより、ページに直接表示される内容が表示されます.
    (6)閲覧コードを修正しcontext.Response.Write(line+”
    ”);次のように変更します.
     context.Response.Write(HttpUtility.HtmlEncode(line)+”
    ”);できます.
    (7)aspxでは、要求されたデータがデフォルトで検証されており、データに<./潜在的なXSS攻撃をする文字があると、エラーが発生します.CMSシステムなどでHTMLコンテンツを送信する必要がある場所で閉じるには、ページ上部のpageにValidateRequest=「false」という属性を追加します.
    (8)表示の際にコンテンツを表示する前にHTML Encodeを行う必要がある場合は、HttpUtilityを用いることができる.HtmlEncodeを手動でエンコードする場合は、Literalコントロール表示を使用することもできますが、LiteralのModel属性をEncodeに変更すると、自動的にHtmlEncodeが行われ、表示されます.
    注記:開発原則2ここでは、次の節から特殊パスの処理とRequestオブジェクトについて説明します.