黑马程序员------web开发的一些基本原则

web开发的一些基本原则:

1.  C#代码是运行在服务器端的,Js代码是运行在浏览器客户端的。

2. 按钮确认提交的实现在Button的OnClient中写。例如:

<input  type=”submit”  name=”delete”  value=”删除”  οnclick=”return  confirm(‘真的要删除吗?’)”/>

代码是运行在浏览器端的,和服务器没有关系。

3.       在服务器端弹出消息窗口:

context.Response.Write(“<script type=’text/javascript’>alert(‘删除成功’)</script>”);

并不是真的在服务器端运行,只是生成了JavaScript代码到浏览器端,浏览器会在解析文档的时候运行alert,不推荐使用这种写法。对于服务器端的代码来说,生成一堆HTML代码就是一堆字符串,没有任何意义,只有到了浏览器端执行才有意义。

案例1:在项目中添加对System.Window.Forms的引用,然后MessageBox.Show(“Hello”),用CassiniDev.exe启动测试程序让学生们远程测试。证明C#代码是运行在服务器端的。

127.0.0.1是回环地址(LoopBack),就是表示通过回环地址访问本机,哪怕是本机,localhost就是127.0.0.1的别名,是无法在外部访问。

0.0.0.0任意IP(Any   Ip),不用写死绑定的IP了,通过任何一段网卡都可以访问网络程序。

案例2:伟大的ASP.NET,可以在访问者中创建木马文件

File.WriteAllText(“c:/muma.exe”,”木马(){葵花点穴手();降龙十八掌();熊猫烧香();}”);

.exe生成到了服务器的磁盘中,而不是访问者的磁盘中,因为c#代码是运行在服务器中的,而不是浏览器中的,浏览器得到的只有返回的HTML内容。

案例3:两个学生分别访问点击自增1的界面,互不影响,因为不同用户的变量内容是隔离的。

4.能在浏览器端完成的事情,就不要到服务器端去做。

5.  按钮隐藏一个控件就不要写服务器端代码,在客户端用JavaScript、dom来操作就可以。比如要操作数据库,显然是在浏览器端做不到的,这时候就要写服务器端代码。校验用户名,密码这样的操作可以放到浏览器端(用户名,密码是写死的),技术上可以,但是这样安全性太差,因此必须放到服务器端。

客户端验证不能代替服务器端验证

设置取款金额不能高于100元

客户端:

<form=id=”form1”runat=”server”  οnsubmit=”if(parseint(document.getElementByIdx_x(‘TextBox1’).value,10)>100){alert(‘最多只能提款100元’);return  false;}”>

服务器端:Label1.Text=”取款成功,金额:”+TextBox1.Text;

如果稍微懂点电脑知识的人禁用javascript(Internet选项—安全—自定义级别—脚本---活动脚本-----禁用)那么客户端javascript校验就被禁用了,就可以取款多余100元了

客户端校验是为了很好的客户端体验,服务器端校验是最后一次把关,防止恶意请求。

注意:.aspx中的button为服务端按钮,不是客户端的,所以onclick是触发服务器端的事件,而onclientclick才是最终生成到客户端浏览器中的onclick代码。

6. 不要把机密信息隐藏到html中,很容易导致信息的泄漏

例如:

只有密码对了才显示下载地址:

应该在服务端控制密码,不对则Visible=”False”,服务器端控件的HyperLink1.Visible=false是根本不输出到客户端。在和JQuery等结合的时候是无法用$(“#控件id”).show()来显示Visibel=False的控件,因为控件根本没有渲染到HTML中。

应该是在机密页码打开之前做权限校验,而不是在一个页面中做校验,如果正确就倒向机密页面,不正确就不倒向。

7.  XSS漏洞:不要轻信用户提交上来的数据

alert消息太难看,因此开发一个ashx页面用来统一展示消息。系统内部需要弹出消息的时候只要将用户Redirect到ShowMessage.ashx?Msg=消息就可以,比如:Response.Redirect(“showMessage.ashx?Msg=用户名不能为空!”)

利用漏洞可以制作送奖品的消息框。也可以收集帐号,密码

aspx中默认对请求的数据进行了校验,如果数据中有<,/等有潜在XSS攻击字符,就会报错,对于一些CMS系统等确实需要提交HTML内容的地方要关闭它,在页面顶部的Page中加入ValidateRequest=”false”这个属性。

在显示的时候如果需要对内容在显示之前进行HTMLEncode,除了可以使用HttpUtility.HtmlEncode进行手动编码的话,还可以用Literal控件显示,如果修改Literal的Mode属性为Encode,那么就会自动进行HtmlEncode然后显示。

用户发帖时也存在XSS的问题,例如:将发帖内容保存到一个文本文件中,不用数据库,降低文本复杂度

我们可以对请求的数据做检测,如果请求数据中有<等就认为是恶意请求,禁止提交。aspx默认就是采用这种策略,缺点是如果做的是一个程序员论坛,程序员就没有办法发HTML的帖子了,因此更好的处理策略是将用户发表的内容按照鸳鸯显示出来,而不是以HTML的方式显示出来,使用HttpUtility.HtmlEncode就可以将字符窜的<,/等特殊字符转换为HTML显示的字符,也就是不把<script>当成定义脚本的标签,而是当成&lt,script&gt,这样可以在页面上直接显示出来的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值