เช่น
<%@ Language="C#" ValidateRequest="false" %>เมื่อ run เพจนี้จะปรากฏข้อความ "Hello" เป็น message box ขึ้นมา เนื่องจากสคริปต์ใน txtString ได้ส่งเข้่ามาและถูก render เป็นไคลเอ็นต์ไซต์สริปต์ในเว็บบราว์เซอร์
<html>
<script runat="server">
void btnSubmit_Click(Object sender, EventArgs e)
{
// If ValidateRequest is false, then 'hello' is displayed
// If ValidateRequest is true, then ASP.NET returns an exception
Response.Write(txtString.Text);
}
</script>
<body>
<form id="form1" runat="server">
<asp:TextBox id="txtString" runat="server"
Text="<script>alert('hello');</script>" />
<asp:Button id="btnSubmit" runat="server" OnClick="btnSubmit_Click"
Text="Submit" />
</form>
</body>
</html>
การป้องกัน XSS
1. กำหนดแอตทริบิวต์ validateRequest="true" ใน configuration ไฟล์ หมายความว่า จะมีการตรวจจับทุก HTML และ character ต่างๆที่จะส่งไปยังเซิร์ฟเวอร์ ถ้ามีการส่งสคริปต์ก็จะถูกตรวจพบและแสดงข้อความผิดพลาดประเภท HttpRequestValidataionException ขึ้นมา
ตัวอย่างการกำหนด
...ซึ่งการกำหนด validateRequest โดย default จะกำหนดให้เป็น true อยู่แล้ว
<pages validateRequest="true"/>
...
2. กำหนดข้อบังคับในการ input เช่น มีการตรวจสอบ input ฝั่งเซิร์ิฟเวอร์เสมอ, กำหนด length, range, format และ type ที่แน่นอนให้กับแต่ละ input เป็นต้น โดยการใช้ RegularExpressionValidator, Regex Class, RangeValidator, CustomValidator
3. ทำการ Encode ข้อมูล output ที่ไม่น่าไว้ใจ โดยการใช้ HttpUtility.HtmlEncode หรือ HttpUtility.UrlEncode และ Encode URL ที่ไม่น่าไว้วางใจโดยใช้ HttpUtility.UrlEncode
เช่น
<%@ Page Language="C#" ValidateRequest="false" %>
<script runat="server">
void submitBtn_Click(object sender, EventArgs e)
{
Response.Write(HttpUtility.HtmlEncode(inputTxt.Text));
}
</script>
<html >
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="inputTxt" Runat="server"
TextMode="MultiLine" Width="382px" Height="152px">
</asp:TextBox>
<asp:Button ID="submitBtn" Runat="server" Text="Submit"
OnClick="submitBtn_Click" />
</div>
</form>
</body>
</html>
HttpUtility.UrlEncode(urlString);
เนื้อหาอ้างอิงจาก http://msdn2.microsoft.com/en-us/library/bb355989.aspx
No comments:
Post a Comment