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

ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ

ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:253119
การปฏิเสธความรับผิดชอบในเนื้อหาของ KB ที่จะไม่มีการปรับปรุงอีกต่อไป
บทความนี้กล่าวถึงผลิตภัณฑ์ที่ Microsoft ไม่มีการสนับสนุนอีกต่อไป เนื้อหาของบทความจึงมีการนำเสนอ "ตามลักษณะที่เป็น" และจะไม่มีการปรับปรุงข้อมูลอีก
สรุป
บทความนี้อธิบายวิธีการระบุและโปรแกรมประยุกต์ 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.MoveNextLoop									
    คอลเลกชันของคุกกี้
    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 = NothingEnd Function						
ข้อมูลอ้างอิง
ดูข้อมูลเพิ่มเติม advisory ใบจากคอมพิวเตอร์ Emergency การตอบสนองทีม (รับรอง) ที่มหาวิทยาลัย Mellon Carnegie ที่ต่อไปนี้:สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความด้านล่างนี้ เพื่อดูบทความใน Microsoft Knowledge Base::
252985วิธีการป้องกันปัญหาความปลอดภัยที่มีการเขียนสคริปต์ไซต์หว่างสำหรับแอปพลิเคชันเว็บ
253121วิธีการตรวจทานรหัสการ MTS/ASP สำหรับช่องโหว่ CSSI
253120วิธีการตรวจทาน InterDev Visual ที่สร้างโดยรหัสสำหรับช่องโหว่ CSSI
253117วิธีการป้องกันช่องโหว่ CSSI Internet Explorer และ Outlook Express
Microsoft จะให้ข้อมูลติดต่อของบริษัทอื่น เพื่อช่วยให้คุณสามารถขอรับการสนับสนุนทางเทคนิคได้ ข้อมูลติดต่อนี้อาจเปลี่ยนแปลงโดยไม่ต้องแจ้งให้ทราบล่วงหน้า Microsoft ไม่รับประกันความถูกต้องของข้อมูลการติดต่อกับบริษัทอื่นๆ เหล่านี้

คำเตือน: บทความนี้ได้รับการแปลโดยอัตโนมัติ

คุณสมบัติ

รหัสบทความ: 253119 - การตรวจสอบครั้งสุดท้าย: 01/08/2011 21:11:00 - ฉบับแก้ไข: 2.0

Microsoft Active Server Pages 4.0

  • kbcodesnippet kbcssi kbhowto kbsecurity kbsecvulnerability kbmt KB253119 KbMtth
คำติชม