安全提交数据.docx

上传人:b****6 文档编号:8261405 上传时间:2023-01-30 格式:DOCX 页数:8 大小:20.21KB
下载 相关 举报
安全提交数据.docx_第1页
第1页 / 共8页
安全提交数据.docx_第2页
第2页 / 共8页
安全提交数据.docx_第3页
第3页 / 共8页
安全提交数据.docx_第4页
第4页 / 共8页
安全提交数据.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

安全提交数据.docx

《安全提交数据.docx》由会员分享,可在线阅读,更多相关《安全提交数据.docx(8页珍藏版)》请在冰豆网上搜索。

安全提交数据.docx

安全提交数据

1.基本要求

单提交中,ASP.NET的Get和Post方式的区别归纳如下几点:

1.get是从服务器上获取数据,post是向服务器传送数据。

2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。

post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTMLHEADER内一起传送到ACTION属性所指的URL地址。

用户看不到这个过程。

3.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

4.get传送的数据量较小,不能大于2KB。

post传送的数据量较大,一般被默认为不受限制。

5.get安全性非常低,post安全性较高。

但是执行效率却比Post方法好

POST:

stringid2=Request.Form["name2"];

GET:

stringid=Request.QueryString["name"];

POSTANDGET:

stringid3=Request.Params["name3"];

stringid4=Request["name4"];

ASP.NET程序安全性(三)表单提交、过滤用户输入

1、边界检查,使用验证控件,

2、模式匹配,使用正则表达式,转义数据,

3、数据编码,防止恶意的输入html或脚本等内容

4、参数化,SqlParameters防止SQL注入

5、异常处理

比如select*fromuserwhereid=....andpwd=...

这样的语句

如果你用

select*fromuserwhereid="+TextBox1.Text+"andpwd="+TextBox2.Text;

这样的SQL语句是可以注入的

但是用select*fromuserwhereid=@idandpwd=@pwd";

parameters.add("id",....)

parameters.add("pwd",....)

这样的方式是安全的,且不需要你做其他的操作

2.在ASP.NET编程中的十种安全措施

一、MD5加密用户密码

本系统用户密码采用MD5加密,这是一种安全性非常高的加密算法,是普遍使用广泛应用于文件验证,银行密码加密等领域,由于这种加密的不可逆性,在使用10位以上字母加数字组成的随机密码时,几乎没有破解的可能性。

二、COOKIES加密

保存COOKIES时,对保存于COOKIES中的数据采用了以MD5加密为基础,加入随机加密因子的改进型专用加密算法。

由于使用的不是标准MD5加密,因此COOKIES中保存的数据不可能被解密。

因此,黑客试图用伪造COOKIES攻击系统变得完全不可能,系统用户资料变得非常安全。

三、SQL注入防护

系统在防SQL注入方面,设置了四道安全防护:

第一、系统级SQL防注入检测,系统会遍历检测所有用GET、POST、COOKIES提交到服务器上的数据,如发现有可能用于构造可注入SQL的异常代码,系统将终止程序运行,并记录日志。

这一道安全防护加在连接数据库之前,能在连接数据库前挡处几乎所有的SQL注入和危害网站安全的数据提交。

第二、程序级安全仿SQL注入系统,在应用程序中,在构建SQL查询语句前,系统将对由外部获取数据,并带入组装为SQL的变量进行安全性验证,过滤可能构成注入的字符。

第三、禁止外部提交表单,系统禁止从本域名之外的其它域名提交表单,防止从外部跳转传输攻击性代码。

第四、数据库操作使用存储过程系统所有的重要数据操作,均使用存储过程完成,避免组装SQL字符串,令即使通过了层层SQL注入过滤的攻击性字符仍然无法发挥作用。

四、木马和病毒防护

针对可能的木马和病毒问题,系统认为,在服务器设置安全的情况下,外部带来的安全问题,主要是用户可能上传病毒和木马,作了如下四层的防护

第一、客户端文件检测,在上传之前,对准备上传的文件进行检测,如果发现不是服务器设置的允许上传的文件类型,系统拒绝进行上传。

如果客户端屏蔽了检测语句,则上传程序同时被屏蔽,系统无法上传任何文件。

第二、服务器端文件安全性检测,对上传到服务器的文件,程序在将文件写入磁盘前,检测文件的类型,如发现是可能构成服务器安全问题的文件类型,即所有可以在服务器上执行的程序,系统都拒绝写入磁盘。

以此保证不被上传可能在服务器上传播的病毒和木马程序。

第三、对有权限的服务器,系统采用即上传即压缩策略,所有上传的除图片文件、视频文件外,其它各种类型的文件一但上传,立即压缩为RAR,因此,即使包含木马也无法运行。

不能对网站安全带来威胁。

第四、底层的文件类型检测系统对文件类型作了底层级检测,由于不仅检测扩展名,而是对文件的实际类型进行检测,所以无法通过改扩展名方式逃过安全性验证。

五、权限控制系统

系统设置了严格有效的权限控制系统,何人可以发信息,何人能删除信息等权限设置系统一共有数十项详细设置,并且网站不同栏目可以设置完全不同的权限,所有权限均在多个层次上严格控制权限。

六、IP记录

IP地址库除记录所有重要操作的IP外,还记录了IP所在地区,系统中内置约了17万条IP特征记录。

详细的IP记录所有的创建记录、编辑记录行为(如发文章,发评论,发站内信等),均记录此操作发生的IP,IP所在地区,操作时间,以便日后备查。

在发现安全问题时,这些数据会非常关键和必要。

七、隐藏的程序入口

有全站生成静态页系统可以全站生成HTML静态文件,使网站的执行程序不暴露在WEB服务中,HTML页不和服务器端程序交互,黑客很难对HTML页进行攻击,很难找到攻击目标。

八、有限的写文件

系统所有的写文件操作只发生于一个UPFILE目录,而此目录下的文件均为只需读写即可,可通过WINDOWS安全性设置,设置此目录下的文件只读写,不执行,而程序所在的其它文件夹只要执行和读权限,从而使破坏性文件无法破坏所有程序执行文件,保证这些文件不被修改。

九、作了MD5校验的订单数据

在商城订单处理中,对提交的订单信息作了MD5校验,从而保证数据不被非法修改。

十、编译执行的代码

由于基于.net开发,代码编译执行,不但更快,也更安全

我用这些办法,作的网站程序叫网站快车,大家去看看,是不是安全。

 

对程序集运行FxCop以确保符合Microsoft.NETFramework设计准则。

FxCop还可以查找200多种代码缺陷并针对这些代码缺陷发出警告

址:

3.防止重复提交

在Web开发中,必须面对的问题就是表单的重复提交问题(这里仅指F5刷新造成的重复提交),.NET中处理这个问题似乎没有什么好的方法。

在网上搜索得到的解决方法主要有两种,一种是直接让表单按钮失效,从而保证一个用户对于一个表单只能提交一次;另一种方法,是一次提交后把表单清空,在后台逻辑上进行判断,从而区分是否重复提交

实现原理:

由于刷新提交表单,实际上提交的就是上一次正常提交的表单,所以我们只要做一个标志,判断出是新表单还是上一次的旧表单就可以分辨出是否进行了重复提交操作。

实现方法:

在页面上放置一个Hidden域,当页面第一次载入的时候,在Session里面保存一个标志,同时,把这个标志保存到页面上的Hidden里面。

在提交表单时,判断表单中提交上来的Hidden和Session中的标志是否一致,就可以知道是正常的提交表单,还是刷新页面导致的重复提交。

需要注意的是,在每次提交表单的处理之后,要更新Session里面的标志。

代码实例:

代码很少,首先是页面上。

 

//www.w3.org/1999/xHTML">

stringGetSessionToken()

{

if(Null!

=Session["Token"])

returnSession["Token"].ToString();

else

return"";

}

ButtonID="btnSubmit"runat="server"OnClick="Button1_Click"Text="Button"/>

LabelID="lblMessage"runat="server"Text="">

Label>

"name="hiddenTestN"/>

需要注意的地方:

1GetSessionToken()函数是为了获得Session里面保存的标志。

2Hidden使用了非服务器控件,这是因为我使用服务器控件,并在后台直接获取Session的标志并赋值给这个Hidden的时候,刷新提交到服务器的表单中的Hidden的值也发生了改变,猜想是服务器控件的话,表单里面的值是保持同步的,当然,也可能是我用的方法不对,嘎嘎。

usingSystem.Data;

usingSystem.Configuration;

usingSystem.Web;

usingSystem.Web.Security;

usingSystem.Web.UI;

usingSystem.Web.UI.WebControls;

usingSystem.Web.UI.WebControls.WebParts;

usingSystem.Web.UI.HtmlControls;

usingSystem.Security.Cryptography;

usingSystem.Text;

 

publicpartialclass_Default:

System.Web.UI.Page

{

protectedvoidPage_Load(objectsender,EventArgse)

{

//第一次载入的时候,生成一个初始的标志

if(Null==Session["Token"])

{

SetToken();

}

}

 

protectedvoidButton1_Click(objectsender,EventArgse)

{

if(Request.Form.Get("hiddenTestN").Equals(GetToken()))

{

lblMessage.ForeColor=System.Drawing.Color.Blue;

lblMessage.Text="正常提交表单";

}

else

{

lblMessage.ForeColor=System.Drawing.Color.Red;

lblMessage.Text="刷新提交表单";

}

SetToken();//别忘了最后要更新Session中的标志

}

 

//获得当前Session里保存的标志

privatestringGetToken()

{

if(Null!

=Session["Token"])

{

returnSession["Token"].ToString();

}

else

{

returnstring.Empty;

}

}

 

//生成标志,并保存到Session

privatevoidSetToken()

{

Session.Add("Token",UserMd5(Session.SessionID+DateTime.Now.Ticks.ToString()));

}

 

//这个函数纯粹是为了让标志稍微短点儿,一堆乱码还特有神秘感,另外,这个UserMd5函数是网上找来的现成儿的

protectedstringUserMd5(stringstr1)

{

stringcl1=str1;

stringpwd="";

MD5md5=MD5.Create();

//加密后是一个字节类型的数组

byte[]s=md5.ComputeHash(Encoding.Unicode.GetBytes(cl1));

//通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得

for(inti=0;i

/span>

{

//将得到的字符串使用十六进制类型格式。

格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符

pwd=pwd+s[i].ToString("X");

}

returnpwd;

}

}需要注意的地方:

1在页面第一次载入的时候要生成标志,以后就不用了。

2在表单处理的函数的最后,记得要更新标志。

3标志我选用了当前SessionID加上当前时间毫秒值,这样基本可以避免标志重复,之后进行了一次MD5,纯粹为了让标志短点儿,当然有一点点安全的意思,哈哈。

所有代码就是这些,很简单,不知道是因为太简单还是大家有更好的方法,我在网上没有找到类似的代码,所以写下来和大家分享,如果有更好的方法,希望可以告诉我,因为好久不做Web开发了,怕是有很多新技术都不会了。

 

使用这个办法,有一个副作用,因为你不能在重新打开页面之后,进行第二次提交操作了。

所以你需要在Page_OnLoad事件代码中加入这样的代码,防止这个问题:

if(!

IsPostBack) Session["time"] = null;

4.Web测试工具

我使用的是HttpWatch这款工具

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1