วิธีการใช้รหัส ASP ตรวจทานแก้ไขสำหรับช่องโหว่ CSSI

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 253119 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

สรุป

บทความนี้อธิบายวิธีการระบุและโปรแกรมประยุกต์ Active Server หน้า (ASP) ถูกต้องที่ทรูไปยังไซต์หว่างการเขียนสคริปต์ความปลอดภัยประเด็น (CSSI) การป้อนข้อมูลเท่านั้นที่จะไม่ถูกต้องตรวจสอบ หรือการจัดรูปแบบทำแอพลิเคชันของคุณต่อการโจมตี

ข้อมูลเพิ่มเติม

ขั้นตอนต่อไปนี้ช่วยให้คุณระบุ และแก้ไขโปรแกรมประยุกต์ ASP ที่ทรูเพื่อ CSSI:
  1. หาค่า ASP รหัสที่สร้าง HTML ที่จะแสดงขึ้น asp เขียน HTML ไปยังการแสดงผลในสองวิธี:
    Response.Write
    					
    -และ-
    <% =
    					
  2. กำหนดว่า ผลลัพธ์ HTML มีพารามิเตอร์ค่านำเข้า พารามิเตอร์เหล่านี้อาจมาจากแหล่งต่าง ๆ รายการต่อไปนี้ประกอบด้วยแหล่งที่มีการป้อนข้อมูลทั่วไป:

    ยุบตารางนี้ขยายตารางนี้
    แหล่งที่มาสำหรับการป้อนค่าตัวอย่างของวิธีการเข้าถึงรหัส ASP
    คอลเลกชัน Request.Form
    Response.Write Request.Form("username")
    									
    คอลเลกชัน Request.QueryString
    <%=Request.QueryString("username")%>
    									
    Response.Write Request.QueryString("username")
    									
    <a href="http://mysite/showuser.asp?username=<% = 
    Request.QueryString("username") %>">mypage</a>
    									
    <a href="http://mysite/mypage.asp"><%=Request.QueryString("url")%></a>
    									
    วัตถุที่ร้องขอ
    Response.Write("username")
    									
    ฐานข้อมูล / วิธีการเข้าถึงข้อมูล
    Do While Not rst.EOF
    	Response.Write rst("myfield") & "<br>"
    	rst.MoveNext
    Loop
    									
    คอลเลกชันของคุกกี้
    Response.Write Request.Cookie("username")
    									
    เซสชันและตัวแปรของแอพลิเคชัน
    Response.Write Session("username")
    									
  3. เมื่อคุณพบรหัส ASP ที่สร้างโดยใช้การป้อนข้อมูลบางอย่างของ HTML คุณจำเป็นต้องประเมินโซลูชันสำหรับโปรแกรมประยุกต์ที่มีการระบุของคุณ วิธีแก้ไขปัญหาด้านล่างนี้แสดงแนวคิดบางทั่วไปจะช่วยให้คุณเริ่มการป้องกันของ CSSI

    โปรดสังเกตว่า เมื่อมีการกรองข้อมูล หรือการเข้ารหัส คุณจำเป็นต้องระบุอักขระที่กำหนดให้เว็บเพจของคุณเพื่อให้แน่ใจว่า ตัวกรองของคุณกำลังตรวจสอบอักขระพิเศษที่เหมาะสม ข้อมูลที่ใส่เข้าไปในเว็บเพจของคุณควรรองออกลำดับไบต์ที่จะมีพิจารณาพิเศษขึ้นอยู่กับชุดอักขระที่ระบุ (charset) charset ที่ได้รับความนิยมคือ ISO 8859-1 ซึ่งเป็นค่าเริ่มต้นใน HTML และ HTTP รุ่นก่อนหน้า คุณต้องนำเข้าบัญชีเติมปัญหาเมื่อคุณเปลี่ยนพารามิเตอร์เหล่านี้
    • ใช้แบบHTMLEncodeวิธีการเข้ารหัสพารามิเตอร์สำหรับการป้อนค่าเมื่อสร้างการแสดงผล

      โดยทั่วไป การโจมตี CSSI ส่วนใหญ่สามารถถูกป้องกันไม่ให้เพียงแค่ โดยการใช้HTMLEncodeพารามิเตอร์ค่านำเข้า การใช้HTMLEncodeด้วยการแทนที่อักขระที่มี meanings พิเศษในตัวแปร HTML ไปยัง HTML ที่แทนที่อักขระ การทำงาน (ตัวอย่างเช่น &amp; = & "=") โปรดหมายเหตุที่เฉพาะข้อมูลจำเป็นจะถูกเข้ารหัส และไม่สายอักขระแบบเต็ม
      <% Response.Write("Hello visitor <I>" +
            Server.HTMLEncode(Request.Form("UserName")) +
            "</I>");
      %> 
      						
    • HTTP_REFERER สามารถใช้เพื่อจำกัดโดเมนที่ร้องขอสามารถถูกส่งไป

      HTTP_REFERER ส่งกลับค่าสตริงที่ประกอบด้วย URL ของคำขอเดิมเมื่อเกิดการเปลี่ยนเส้นทาง เว็บเซิร์ฟเวอร์สามารถตรวจสอบฟิลด์ทำการอ้างอิงเมื่อพวกเขาได้รับการกรอกข้อมูลในรูปแบบ และปฏิเสธได้ถ้าไม่ได้มาจากตำแหน่งที่ถูกต้อง คุณสามารถตรวจสอบการ HTTP_REFERER ในลักษณะต่อไปนี้:
         <%
         If (Request.ServerVariables("HTTP_REFERER") = "") Or _
            (Left(Request.ServerVariables("HTTP_REFERER"),42) <> _
            "http://www.myserver.com/AppDir/mainfrm.asp") Then
            Response.Redirect "http://www.myserver.com/AppDir/mainfrm.asp"
         End If
         %> 
      							
      หมายเหตุ:: ฟิลด์จะทำการอ้างอิงที่มีข้อจำกัดบาง:
      • คุณเสี่ยงบล็อกการส่งฟอร์มที่ถูกต้องตามกฎหมาย
      • การเชื่อมโยงอาจมาจากอีเมลหรือคั่นหน้าเว็บที่ไม่มี URL
      • เบราว์เซอร์อาจโดยเจตนาล้างฟิลด์ทำการอ้างอิง เช่นในระหว่างการร้องขอ HTTPS
    • การใช้URLEncodeเมื่อต้องการเข้ารหัส url ที่ได้รับเป็นพารามิเตอร์สำหรับการป้อนค่า

      กระบวนการURLEncodeวิธีใช้ URL ที่กฎ การรวมอักขระเลี่ยง เพื่อเป็นสายอักขระที่ระบุในการเข้ารหัส คุณควรเข้ารหัส url ขาเข้าก่อนที่จะแสดงแฟ้มเหล่านั้น ที่นี่คือตัวอย่างสำหรับURLEncode:
      <%
            var BaseURL = http://www.mysite.com/search2.asp?searchagain=;
            Response.write("<a href=\"" + BaseUrl +
            Server.URLEncode(Request.QueryString("SearchString")) +
            "\">click-me</a>");
      %>
      						
    • strip หรือปรับเปลี่ยนอักขระพิเศษจากพารามิเตอร์สำหรับการป้อนค่า อักขระพิเศษรวมต่อไปนี้:
      < > " ' % ; ) ( & +
      							
      คุณสามารถ strip หรือปรับเปลี่ยนอักขระ เมื่อคุณอ่านใน หรือ เมื่อคุณแสดงเหล่านั้นไปยังเบราว์เซอร์ขึ้นอยู่กับโปรแกรมประยุกต์ของคุณ

      ตัวอย่างนี้ใช้ JavaScript เพื่อกรองอักขระพิเศษ:
      function RemoveBad(strTemp) { 
      	strTemp = strTemp.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); 
      return strTemp;
      } 
      							
      ตัวอย่างนี้ใช้นิพจน์ปกติรุ่น 5.0 Edition การเขียนสคริปต์ Visual Basic เพื่อกรองอักขระพิเศษ:
      Function ValidateTags(QueryString)
      	Dim o
      	Set o = CreateObject("VBScript.RegExp") ' -> VB Script 5.0
      
      	Dim sBad
      
      	sBad = "(<\s*(script|object|applet|embed|form)\s*>)"   ' <  script xxx >
      	sbad = sbad & "|" & "(<.*>)"
                   ' >xxxxx<  warning includes hyperlinks and stuff between > and <
      	sbad = sbad & "|" & "(&.{1,5};)"   ' &xxxx;
      	sbad = sbad & "|" & "eval\s*\("    ' eval  ( 
       	sbad = sbad & "|" & "(event\s*=)"  ' event  =
      	
      	'Now lets check for encoding
      	sbad = Replace(sbad,"<", "(<|%60|<)")
      	sbad = Replace(sbad,">", "(>|%62|>)")
      	
      	o.IgnoreCase = True 'ignore case of string
      	o.Global =False 'stop on first hit
      
      	o.Pattern = sBad
      
      	ValidateTags = o.Test(QueryString)
      
      	Set o = Nothing
      End Function
      						

ข้อมูลอ้างอิง

ดูข้อมูลเพิ่มเติม advisory ใบจากคอมพิวเตอร์ Emergency การตอบสนองทีม (รับรอง) ที่มหาวิทยาลัย Mellon Carnegie ที่ต่อไปนี้:
http://www.cert.org/advisories/CA-2000-02.html
สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความด้านล่างนี้ เพื่อดูบทความใน Microsoft Knowledge Base::
252985วิธีการป้องกันปัญหาความปลอดภัยที่มีการเขียนสคริปต์ไซต์หว่างสำหรับแอปพลิเคชันเว็บ
253121วิธีการตรวจทานรหัสการ MTS/ASP สำหรับช่องโหว่ CSSI
253120วิธีการตรวจทาน InterDev Visual ที่สร้างโดยรหัสสำหรับช่องโหว่ CSSI
253117วิธีการป้องกันช่องโหว่ CSSI Internet Explorer และ Outlook Express
Microsoft จะให้ข้อมูลติดต่อของบริษัทอื่น เพื่อช่วยให้คุณสามารถขอรับการสนับสนุนทางเทคนิคได้ ข้อมูลติดต่อนี้อาจเปลี่ยนแปลงโดยไม่ต้องแจ้งให้ทราบล่วงหน้า Microsoft ไม่รับประกันความถูกต้องของข้อมูลการติดต่อกับบริษัทอื่นๆ เหล่านี้

คุณสมบัติ

หมายเลขบทความ (Article ID): 253119 - รีวิวครั้งสุดท้าย: 8 มกราคม 2554 - Revision: 2.0
ใช้กับ
  • Microsoft Active Server Pages 4.0
Keywords: 
kbcodesnippet kbcssi kbhowto kbsecurity kbsecvulnerability kbmt KB253119 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:253119
การปฏิเสธความรับผิดชอบในเนื้อหาของ KB ที่จะไม่มีการปรับปรุงอีกต่อไป
บทความนี้กล่าวถึงผลิตภัณฑ์ที่ Microsoft ไม่มีการสนับสนุนอีกต่อไป เนื้อหาของบทความจึงมีการนำเสนอ "ตามลักษณะที่เป็น" และจะไม่มีการปรับปรุงข้อมูลอีก

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com