14 个解决方案
#1
它报告的问题实际上在你的系统中存在吗?
#2
就是SQL注入嘛
最简单的,也是最推荐的方案就是执行SQL时通过参数化方式执行
差点的方案就是拦截数据库关键字
下面虽然是java的,但思路是一样的
http://blog.csdn.net/arthurzil/article/details/6863213
最简单的,也是最推荐的方案就是执行SQL时通过参数化方式执行
差点的方案就是拦截数据库关键字
下面虽然是java的,但思路是一样的
http://blog.csdn.net/arthurzil/article/details/6863213
#3
SQL参数化
#4
其实最“好”的办法,就是把你的老板用酒灌醉,或者让他无法上班,这样你就清闲了。如果让我们说什么是有“道德”的做法,那么就是要真正面对自己的问题,而不是去蒙谁。
盲注的意思,是说假设在页面用账号123登陆没有错误,用账号12345登陆则报“此用户不存在”,而用账号 123'45登陆则不报告“此账号不存在”(而是其它错误信息页面,或者干脆就不报错),那么这就是盲注成功了。这就意味着,你连带有单引号的用户都不能当作普通的用户名去处理。
有人说“我把单引号过滤掉不就没有SQL注入了嘛”。其实是就是不了解什么叫“盲注”而说出来的。盲注可不是什么简单的防SQL注入,而是判断你能够正确地处理基本的sql语言语法。
盲注的意思,是说假设在页面用账号123登陆没有错误,用账号12345登陆则报“此用户不存在”,而用账号 123'45登陆则不报告“此账号不存在”(而是其它错误信息页面,或者干脆就不报错),那么这就是盲注成功了。这就意味着,你连带有单引号的用户都不能当作普通的用户名去处理。
有人说“我把单引号过滤掉不就没有SQL注入了嘛”。其实是就是不了解什么叫“盲注”而说出来的。盲注可不是什么简单的防SQL注入,而是判断你能够正确地处理基本的sql语言语法。
#5
你的软件存在sql注入的漏洞么?
如果没这种漏洞,你管它sql盲注呢?!
#6
盲注检测许多都是误报,所以你需要问一问它到底使用的检测数据“是什么”。有些扯淡的厂商进行的盲注检测,假设在录入界面写
123' and exists(select 1) 然后发现你的页面没有给出一个“服务器5xx错误”的页面,它就认为你有盲注问题了,这种检测就很扯淡,就应该跟进行这种检测的厂商交涉。
所以你应该先把对方提供的具体的检测信息贴出来。
123' and exists(select 1) 然后发现你的页面没有给出一个“服务器5xx错误”的页面,它就认为你有盲注问题了,这种检测就很扯淡,就应该跟进行这种检测的厂商交涉。
所以你应该先把对方提供的具体的检测信息贴出来。
#7
如果注入了给出黄页,应该算是程序有漏洞才对。
黄页也会暴露很多信息。只是有些低级程序员看不懂而已。
黄页也会暴露很多信息。只是有些低级程序员看不懂而已。
#8
#9
什么意思。。。。。。。。。。。。。
#11
采用了实体框架,微软内部应该用的是参数化吧,不知道为什么还会出现
#12
每次扫都会出现
#13
采用的是IBM自动检测的,天知道他输入了什么东西,按照什么规则来测的 ,头都大了
#14
看来你也是比appscan逼的
aspx防护代码
-----------------使用方法------------------------------------------------------------------
1.将App_Code目录拷贝到web根目录
假如已经存在App_Code目录,那直接把App_Code目录里的360safe.cs文件拷贝到当前的App_Code目录即可。
2.将Global.asax文件拷贝到web根目录
假如已经存在Global.asax文件,那直接把下面这段代码
void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.Cookies != null)
{
if (safe_360.CookieData())
{
Response.Write("您提交的Cookie数据有恶意字符!");
Response.End();
}
}
if (Request.UrlReferrer != null)
{
if (safe_360.referer())
{
Response.Write("您提交的Referrer数据有恶意字符!");
Response.End();
}
}
if (Request.RequestType.ToUpper() == "POST")
{
if (safe_360.PostData())
{
Response.Write("您提交的Post数据有恶意字符!");
Response.End();
}
}
if (Request.RequestType.ToUpper() == "GET")
{
if (safe_360.GetData())
{
Response.Write("您提交的Get数据有恶意字符!");
Response.End();
}
}
}
拷贝到当前的Global.asax文件里保存。
aspx防护代码
-----------------使用方法------------------------------------------------------------------
1.将App_Code目录拷贝到web根目录
假如已经存在App_Code目录,那直接把App_Code目录里的360safe.cs文件拷贝到当前的App_Code目录即可。
2.将Global.asax文件拷贝到web根目录
假如已经存在Global.asax文件,那直接把下面这段代码
void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.Cookies != null)
{
if (safe_360.CookieData())
{
Response.Write("您提交的Cookie数据有恶意字符!");
Response.End();
}
}
if (Request.UrlReferrer != null)
{
if (safe_360.referer())
{
Response.Write("您提交的Referrer数据有恶意字符!");
Response.End();
}
}
if (Request.RequestType.ToUpper() == "POST")
{
if (safe_360.PostData())
{
Response.Write("您提交的Post数据有恶意字符!");
Response.End();
}
}
if (Request.RequestType.ToUpper() == "GET")
{
if (safe_360.GetData())
{
Response.Write("您提交的Get数据有恶意字符!");
Response.End();
}
}
}
拷贝到当前的Global.asax文件里保存。
using System;
using System.Web;
using System.Text;
using System.Text.RegularExpressions;
public class safe_360
{
private const string StrRegex = @"\b(alert|confirm|prompt)\b|^\+/v(8|9)|\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|/\*.+?\*/|<\s*script\b|<\s*img\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)";
public static bool PostData()
{
bool result = false;
for (int i = 0; i < HttpContext.Current.Request.Form.Count; i++)
{
result = CheckData(HttpContext.Current.Request.Form[i].ToString());
if (result)
{
break;
}
}
return result;
}
public static bool GetData()
{
bool result = false;
for (int i = 0; i < HttpContext.Current.Request.QueryString.Count; i++)
{
result = CheckData(HttpContext.Current.Request.QueryString[i].ToString());
if (result)
{
break;
}
}
return result;
}
public static bool CookieData()
{
bool result = false;
for (int i = 0; i < HttpContext.Current.Request.Cookies.Count; i++)
{
result = CheckData(HttpContext.Current.Request.Cookies[i].Value.ToLower());
if (result)
{
break;
}
}
return result;
}
public static bool referer()
{
bool result = false;
return result = CheckData(HttpContext.Current.Request.UrlReferrer.ToString());
}
public static bool CheckData(string inputData)
{
if (Regex.IsMatch(inputData, StrRegex))
{
return true;
}
else
{
return false;
}
}
}
#1
它报告的问题实际上在你的系统中存在吗?
#2
就是SQL注入嘛
最简单的,也是最推荐的方案就是执行SQL时通过参数化方式执行
差点的方案就是拦截数据库关键字
下面虽然是java的,但思路是一样的
http://blog.csdn.net/arthurzil/article/details/6863213
最简单的,也是最推荐的方案就是执行SQL时通过参数化方式执行
差点的方案就是拦截数据库关键字
下面虽然是java的,但思路是一样的
http://blog.csdn.net/arthurzil/article/details/6863213
#3
SQL参数化
#4
其实最“好”的办法,就是把你的老板用酒灌醉,或者让他无法上班,这样你就清闲了。如果让我们说什么是有“道德”的做法,那么就是要真正面对自己的问题,而不是去蒙谁。
盲注的意思,是说假设在页面用账号123登陆没有错误,用账号12345登陆则报“此用户不存在”,而用账号 123'45登陆则不报告“此账号不存在”(而是其它错误信息页面,或者干脆就不报错),那么这就是盲注成功了。这就意味着,你连带有单引号的用户都不能当作普通的用户名去处理。
有人说“我把单引号过滤掉不就没有SQL注入了嘛”。其实是就是不了解什么叫“盲注”而说出来的。盲注可不是什么简单的防SQL注入,而是判断你能够正确地处理基本的sql语言语法。
盲注的意思,是说假设在页面用账号123登陆没有错误,用账号12345登陆则报“此用户不存在”,而用账号 123'45登陆则不报告“此账号不存在”(而是其它错误信息页面,或者干脆就不报错),那么这就是盲注成功了。这就意味着,你连带有单引号的用户都不能当作普通的用户名去处理。
有人说“我把单引号过滤掉不就没有SQL注入了嘛”。其实是就是不了解什么叫“盲注”而说出来的。盲注可不是什么简单的防SQL注入,而是判断你能够正确地处理基本的sql语言语法。
#5
你的软件存在sql注入的漏洞么?
如果没这种漏洞,你管它sql盲注呢?!
#6
盲注检测许多都是误报,所以你需要问一问它到底使用的检测数据“是什么”。有些扯淡的厂商进行的盲注检测,假设在录入界面写
123' and exists(select 1) 然后发现你的页面没有给出一个“服务器5xx错误”的页面,它就认为你有盲注问题了,这种检测就很扯淡,就应该跟进行这种检测的厂商交涉。
所以你应该先把对方提供的具体的检测信息贴出来。
123' and exists(select 1) 然后发现你的页面没有给出一个“服务器5xx错误”的页面,它就认为你有盲注问题了,这种检测就很扯淡,就应该跟进行这种检测的厂商交涉。
所以你应该先把对方提供的具体的检测信息贴出来。
#7
如果注入了给出黄页,应该算是程序有漏洞才对。
黄页也会暴露很多信息。只是有些低级程序员看不懂而已。
黄页也会暴露很多信息。只是有些低级程序员看不懂而已。
#8
#9
什么意思。。。。。。。。。。。。。
#10
#11
采用了实体框架,微软内部应该用的是参数化吧,不知道为什么还会出现
#12
每次扫都会出现
#13
采用的是IBM自动检测的,天知道他输入了什么东西,按照什么规则来测的 ,头都大了
#14
看来你也是比appscan逼的
aspx防护代码
-----------------使用方法------------------------------------------------------------------
1.将App_Code目录拷贝到web根目录
假如已经存在App_Code目录,那直接把App_Code目录里的360safe.cs文件拷贝到当前的App_Code目录即可。
2.将Global.asax文件拷贝到web根目录
假如已经存在Global.asax文件,那直接把下面这段代码
void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.Cookies != null)
{
if (safe_360.CookieData())
{
Response.Write("您提交的Cookie数据有恶意字符!");
Response.End();
}
}
if (Request.UrlReferrer != null)
{
if (safe_360.referer())
{
Response.Write("您提交的Referrer数据有恶意字符!");
Response.End();
}
}
if (Request.RequestType.ToUpper() == "POST")
{
if (safe_360.PostData())
{
Response.Write("您提交的Post数据有恶意字符!");
Response.End();
}
}
if (Request.RequestType.ToUpper() == "GET")
{
if (safe_360.GetData())
{
Response.Write("您提交的Get数据有恶意字符!");
Response.End();
}
}
}
拷贝到当前的Global.asax文件里保存。
aspx防护代码
-----------------使用方法------------------------------------------------------------------
1.将App_Code目录拷贝到web根目录
假如已经存在App_Code目录,那直接把App_Code目录里的360safe.cs文件拷贝到当前的App_Code目录即可。
2.将Global.asax文件拷贝到web根目录
假如已经存在Global.asax文件,那直接把下面这段代码
void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.Cookies != null)
{
if (safe_360.CookieData())
{
Response.Write("您提交的Cookie数据有恶意字符!");
Response.End();
}
}
if (Request.UrlReferrer != null)
{
if (safe_360.referer())
{
Response.Write("您提交的Referrer数据有恶意字符!");
Response.End();
}
}
if (Request.RequestType.ToUpper() == "POST")
{
if (safe_360.PostData())
{
Response.Write("您提交的Post数据有恶意字符!");
Response.End();
}
}
if (Request.RequestType.ToUpper() == "GET")
{
if (safe_360.GetData())
{
Response.Write("您提交的Get数据有恶意字符!");
Response.End();
}
}
}
拷贝到当前的Global.asax文件里保存。
using System;
using System.Web;
using System.Text;
using System.Text.RegularExpressions;
public class safe_360
{
private const string StrRegex = @"\b(alert|confirm|prompt)\b|^\+/v(8|9)|\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|/\*.+?\*/|<\s*script\b|<\s*img\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)";
public static bool PostData()
{
bool result = false;
for (int i = 0; i < HttpContext.Current.Request.Form.Count; i++)
{
result = CheckData(HttpContext.Current.Request.Form[i].ToString());
if (result)
{
break;
}
}
return result;
}
public static bool GetData()
{
bool result = false;
for (int i = 0; i < HttpContext.Current.Request.QueryString.Count; i++)
{
result = CheckData(HttpContext.Current.Request.QueryString[i].ToString());
if (result)
{
break;
}
}
return result;
}
public static bool CookieData()
{
bool result = false;
for (int i = 0; i < HttpContext.Current.Request.Cookies.Count; i++)
{
result = CheckData(HttpContext.Current.Request.Cookies[i].Value.ToLower());
if (result)
{
break;
}
}
return result;
}
public static bool referer()
{
bool result = false;
return result = CheckData(HttpContext.Current.Request.UrlReferrer.ToString());
}
public static bool CheckData(string inputData)
{
if (Regex.IsMatch(inputData, StrRegex))
{
return true;
}
else
{
return false;
}
}
}