Web開發原則
一 最小權限原則
隻允許使用者做***,而不是“不允許使用者做***”。
(總有一些非法權限是沒有考慮到的,是以應該隻配置設定給使用者需要的權限)
了解解釋:
浏覽器檢視的是伺服器執行輸出的文本,除非伺服器有漏洞,否則浏覽者無法檢視服務端的代碼。
二 能放在用戶端的就不要放到伺服器端
比如隐藏一個控件,
可以直接在用戶端用
οnclick=”document.getElementById(“xx”).style.display=’none’”
而不用在服務端執行
xx.visible=false
三 不可信的用戶端校驗
①用戶端的驗證不能代替服務端驗證,因為浏覽器可以禁用JS
示例:在銀行系統中如果你的餘額不足100,設定不能取大于餘額的金額。
用戶端:
<form id="form1" runat="server" οnsubmit="if(parseInt(document.getElementById('TextBox1').value,10)>parseInt(document.getElementById('Label1').value,10)){alert('餘額不足');return false;}">
服務端:
Label2.Text="取款成功,金額:"+TextBox1.Text;
分析:
這裡使用的是JS方式來校驗取款金額是否合理的。但當使用者禁用了JS之後就可以不管多少,自由取款了。這個校驗就完全沒有用了。
IE可以通過(Internet選項->安全->自定義級别->腳本->活動腳本->禁用)來設定禁用script。
運作結果可自行設定檢驗一下效果。
是以應該改為下面的伺服器校驗:
int i = Convert.ToInt32(TextBox1.Text);
if (i > 100)
{
Label2.Text = "金額大于100不可取";
}
else
{
Label2.Text = "取款成功"+i;
}
②不要隐藏機密資訊到HTML
這個很好了解,比如不要把使用者名密碼的校驗直接寫在JS中,因為JS等代碼都是可以直接看到的。要寫也應該寫在外部的檔案夾中。以路徑的形式添加進來使用。
③XSS(Cross Site Scripting)漏洞
簡而言之就是利用網頁本身實作的漏洞,通過腳本來達到我們自己的目的。 這裡通過一個例子更好的來了解,這個問題。
示例:實作添加評論與顯示評論的功能。
添加評論
Add.aspx
<body>
<form id="form1" runat="server">
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="添加評論" />
</form>
</body>
Add.aspx.cs
protected void Button1_Click(object sender, EventArgs e)
{
File.AppendAllText("H:/1.txt",TextBox1.Text+"<br/>");
}
檢視評論
View.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
string s = File.ReadAllText("H:/1.txt");
Response.Write(s);
}
Add
輸入: 你好呀!
View運作結果:
Add 輸入: <script type="text/javascript">alert("恭喜你中獎了,請到www.nihao.com領取獎品!")</script>
在此處添加:ValidateRequest="false"
View運作結果:
處理方法: 1.目前aspx中預設隊請求的資料進行了校驗,如果資料中有<、/等有潛在XSS攻擊的字元,則會報錯。 2.在顯示的時候對内容進行HTMLEncode。 将View.aspx.cs改為:
protected void Page_Load(object sender, EventArgs e)
{
string s = File.ReadAllText("H:/1.txt");
Response.Write(HttpUtility.HtmlEncode(s));
}
或者使用Literal控件顯示,其自帶Encode屬性。