Web开发原则学习

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属性。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值