SQL注入攻击之关键字检测
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。我们都知道计算机技术发展日新月异,速度惊人的快,你我稍不留神,就会被慢慢淘汰!因此:每日不间断的学习是避免被淘汰的不二法宝。
十年河东十年河西,莫欺少年穷!
无聊,随便来点代码,刷刷成就感@
1、SQL注入攻击防范之关键字过滤
#region sql注入攻击
public static string[] words = { "select", "insert", "delete", "count(", "drop table", "update", "truncate", "asc(", "mid(", "char(", "xp_cmdshell", "exec", "master", "net", "and", "or", "where" }; public static string CheckParam(string Value)
{
Value = Value.Replace("'", "");
Value = Value.Replace(";", "");
Value = Value.Replace("--", "");
Value = Value.Replace("/**/", "");
return Value;
}
public static string CheckParamThrow(string Value)
{
for (int i = ; i < words.Length; i++)
{
if (Value.IndexOf(words[i], StringComparison.OrdinalIgnoreCase) > )
{
string pattern = string.Format(@"[\W]{0}[\W]", words[i]);
Regex rx = new Regex(pattern, RegexOptions.IgnoreCase);
if (rx.IsMatch(Value))
throw new Exception("发现sql注入痕迹!");
}
}
return CheckParam(Value);
}
/// <summary>
/// 查找是否含有非法参数
/// </summary>
/// <param name="Value"></param>
/// <returns></returns>
public static bool CheckParamBool(string Value)
{
for (int i = ; i < words.Length; i++)
{
if (Value.IndexOf(words[i], StringComparison.OrdinalIgnoreCase) > )
return true;
}
return false;
}
#endregion
2、C#获取公网IP的方法
#region IP地址处理
/// <summary>
/// 取得客户端真实IP。如果有代理则取第一个非内网地址
/// by flower.b
/// </summary>
public static string IPAddress
{
get
{
string result = String.Empty; result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (result != null && result != String.Empty)
{
//可能有代理
if (result.IndexOf(".") == -) //没有“.”肯定是非IPv4格式
result = null;
else
{
if (result.IndexOf(",") != -)
{
//有“,”,估计多个代理。取第一个不是内网的IP。
result = result.Replace(" ", "").Replace("'", "");
string[] temparyip = result.Split(",;".ToCharArray());
for (int i = ; i < temparyip.Length; i++)
{
if (IsIPAddress(temparyip[i])
&& temparyip[i].Substring(, ) != "10."
&& temparyip[i].Substring(, ) != "192.168"
&& temparyip[i].Substring(, ) != "172.16.")
{
return temparyip[i]; //找到不是内网的地址
}
}
}
else if (IsIPAddress(result)) //代理即是IP格式
return result;
else
result = null; //代理中的内容 非IP,取IP
} }
string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (null == result || result == String.Empty)
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (result == null || result == String.Empty)
result = HttpContext.Current.Request.UserHostAddress;
return result;
}
} /// <summary>
/// 判断是否是IP地址格式 0.0.0.0
/// </summary>
/// <param name="str1">待判断的IP地址</param>
/// <returns>true or false</returns>
private static bool IsIPAddress(string str1)
{
if (str1 == null || str1 == string.Empty || str1.Length < || str1.Length > ) return false; string regformat = @"^d{1,3}[.]d{1,3}[.]d{1,3}[.]d{1,3}$"; Regex regex = new Regex(regformat, RegexOptions.IgnoreCase);
return regex.IsMatch(str1);
}
#endregion
3、站点URL基本信息处理
#region 站点的基本url信息
/// <summary>
/// 获取当前网站根地址 http://wwww.baidu.com
/// </summary>
public static string GetRootUrl()
{
return "http://" + HttpContext.Current.Request.Url.Host;
}
/// <summary>
/// 获得网站的根目录的url,比如http://www.baidu.com
/// </summary>
/// <returns></returns>
public static string getWebSite()
{
string website = "http://" + HttpContext.Current.Request.Url.Authority;
return website;
}
/// <summary>
/// 设当前页完整地址
/// 比如:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli
/// </summary>
/// <returns></returns>
public static string getTotalUrl()
{
string url = HttpContext.Current.Request.Url.ToString();
return url;
}
/// <summary>
/// 取得网站根目录的物理路径
/// </summary>
/// <returns></returns>
public static string GetRootPath()
{
string AppPath = "";
HttpContext HttpCurrent = HttpContext.Current;
if (HttpCurrent != null)
{
AppPath = HttpCurrent.Server.MapPath("~");
}
else
{
AppPath = AppDomain.CurrentDomain.BaseDirectory;
if (Regex.Match(AppPath, @"\\$", RegexOptions.Compiled).Success)
AppPath = AppPath.Substring(, AppPath.Length - );
}
return AppPath;
}
#endregion
4、检索文件、文件夹
#region 检索文件
static System.Collections.ArrayList alst;
/// <summary>
/// 检索文件
/// </summary>
/// <param name="dir">目录</param>
/// <param name="Filetype">文件类型 .css .jpg</param>
/// foreach (string f in readlist(Server.MapPath(@"/Manger/")))//xiaobaigang为文件夹名称
///{
/// Response.Write(f);
/// //this.ListBox1.Items.Add(f);
///}
public static void GetFiles(string dir,string Filetype)
{
try
{
string[] files = Directory.GetFiles(dir);//得到文件
foreach (string file in files)//循环文件
{
string exname = file.Substring(file.LastIndexOf(".") + );//得到后缀名
// if (".txt|.aspx".IndexOf(file.Substring(file.LastIndexOf(".") + 1)) > -1)//查找.txt .aspx结尾的文件
if (Filetype.IndexOf(file.Substring(file.LastIndexOf(".") + )) > -)//如果后缀名为.txt文件
{
FileInfo fi = new FileInfo(file);//建立FileInfo对象
alst.Add(fi.FullName);//把.txt文件全名加人到FileInfo对象 //if (File.Exists(fi.FullName))
//{
// File.Delete(fi.FullName);
//}
}
}
}
catch
{ }
}
/// <summary>
/// 获取CSS文件
/// </summary>
/// <param name="dir"></param>
public static void GetFiles(string dir)
{
try
{
string[] files = Directory.GetFiles(dir);//得到文件
foreach (string file in files)//循环文件
{
string exname = file.Substring(file.LastIndexOf(".") + );//得到后缀名
// if (".txt|.aspx".IndexOf(file.Substring(file.LastIndexOf(".") + 1)) > -1)//查找.txt .aspx结尾的文件
if (".css".IndexOf(file.Substring(file.LastIndexOf(".") + )) > -)//如果后缀名为.txt文件
{
FileInfo fi = new FileInfo(file);//建立FileInfo对象
alst.Add(fi.FullName);//把.txt文件全名加人到FileInfo对象 //if (File.Exists(fi.FullName))
//{
// File.Delete(fi.FullName);
//}
}
}
}
catch
{ }
}
public static string[] readlist(string path)
{
alst = new System.Collections.ArrayList();//建立ArrayList对象
GetDirs(path);//得到文件夹
return (string[])alst.ToArray(typeof(string));//把ArrayList转化为string[]
} public static void GetDirs(string d)//得到所有文件夹
{
GetFiles(d);//得到所有文件夹里面的文件
try
{
string[] dirs = Directory.GetDirectories(d);
foreach (string dir in dirs)
{
GetDirs(dir);//递归
}
}
catch
{
}
}
#endregion
5、C#时间处理
#region 时间处理
/// <summary>
/// 用于统计时间段内的天数
/// </summary>
/// <param name="DateTime1">时间一</param>
/// <param name="DateTime2">时间二</param>
/// <returns></returns>
public static int DayDiff(DateTime DateTime1, DateTime DateTime2)
{
TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
TimeSpan ts = ts1.Subtract(ts2).Duration();
return ts.Days;
} public static int MinutesDiff(DateTime DateTime1, DateTime DateTime2)
{
TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
TimeSpan ts = ts1.Subtract(ts2).Duration();
return ts.Minutes;
} /// <summary>
/// 时间一减去时间二
/// </summary>
/// <param name="DateTime1">时间一</param>
/// <param name="DateTime2">时间二</param>
/// <returns></returns>
public static int DiffDay(DateTime DateTime1, DateTime DateTime2)
{
TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
TimeSpan ts = ts1.Subtract(ts2);
return ts.Days;
} /// <summary>
/// 时间格式转换
/// </summary>
/// <param name="dt">时间</param>
/// <returns>特定时间格式</returns>
public static string GetDateFomatString(DateTime dt)
{
return string.Format("{0:yy年MM月dd日HH时mm分}", dt);
}
public static string GetDateFomatString()
{
return string.Format("{0:yy年MM月dd日HH时mm分}", DateTime.Now);
}
public static string GetDateFomatAllString(DateTime dt)
{
return string.Format("{0:yyyy-MM-dd HH:mm:ss}", dt);
}
public static string GetDateFomatAllString(object dt)
{
return string.Format("{0:yyyy-MM-dd HH:mm:ss}", dt);
}
public static string GetDateFomatStringSimple(object dt)
{
return string.Format("{0:yyyy-MM-dd}", dt);
}
#endregion
@陈卧龙的博客
SQL注入攻击之关键字检测的更多相关文章
- Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法
sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法.怎么来解决和防范sql注入, ...
- 2017-2018-2 20179205《网络攻防技术与实践》第十一周作业 SQL注入攻击与实践
<网络攻防技术与实践>第十一周作业 SQL注入攻击与实践 1.研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 缓冲区溢出原理 在计算机内部,输入数据通常被存放在一个临时空间内, ...
- 如何对抗、预防 SQL注入 攻击
一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体 ...
- Web安全篇之SQL注入攻击
在网上找了一篇关于sql注入的解释文章,还有很多技术,走马观花吧 文章来源:http://www.2cto.com/article/201310/250877.html ps:直接copy,格式有点问 ...
- web攻击之三:SQL注入攻击的种类和防范手段
观察近来的一些安全事件及其后果,安全专家们已经得到一个结论,这些威胁主要是通过SQL注入造成的.虽然前面有许多文章讨论了SQL注入,但今天所讨论的内容也许可帮助你检查自己的服务器,并采取相应防范措施. ...
- 防止SQL注入攻击的一些方法小结
SQL注入攻击的危害性很大.在讲解其防止办法之前,数据库管理员有必要先了解一下其攻击的原理.这有利于管理员采取有针对性的防治措施. 一. SQL注入攻击的简单示例. statement := &quo ...
- SQL注入攻击
SQL注入攻击是黑客对数据库进行攻击的常用手段之一.随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候, ...
- 了解SQL注入攻击
SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义. 随着B/S模式被广泛的应用,用这种模式编写应用程序的程序员也越来越多,但由于开发人员的水 ...
- SQL注入攻击[详解]
SQL注入攻击是黑客对数据库进行攻击的常用手段之一.随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候, ...
随机推荐
- Javascript 笔记与总结(1-2)词法分析
词法分析,按顺序分析 3 样: 第 1 步:先分析参数 第 2 步:再分析变量声明 第 3 步:再分析函数声明 一个函数能使用的局部变量,就从上面 3 步分析而来. 具体步骤: 0:函数运行前的瞬间, ...
- php 递归创建目录、递归删除非空目录、迭代创建目录
递归创建目录 方法一 function mk_dir($path){ if(is_dir($path)){ //参数本身是一个目录 return true; } if(is_dir(dirname($ ...
- UITableview 多行删除
// RootViewController.m #import "RootViewController.h"#import "NextViewController.h& ...
- 用命令行导出和导入MySQL数据库
php 用命令行导出和导入MySQL数据库 命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program Files ...
- 【MySql】赶集网mysql开发36条军规
[MySql]赶集网mysql开发36条军规 2012-05-14 14:02:33 分类: Linux 写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒 ...
- PHP pear安装
PHP pear安装 Posted on 2012-07-06 10:19 bug yang 阅读(5787) 评论(0) 编辑 收藏 转自:http://wangye.org/blog/archiv ...
- EditPlus使用心得及常用快捷键
下载好烈火版EditPlus_4.00.465_SC 然后去官网下载自动补全ACP文件 我用的是php_stx_acp.zip 解压到editplus4主目录下 然后打开软件-设置-参数 先调字 ...
- 页面静态化2 --- 使用PHP缓存机制来完成页面静态化(上)(ob_flush和flush函数区别用法)
我们可以使用PHP自带的缓存机制来完成页面静态化,但在这里,需要说明一点,仅靠PHP缓存机制并不能完美的解决页面静态化,往往需要和其他页面静态技术(通常是伪静态技术)结合使用 例子: 当访问一个页面时 ...
- WPF 最大化最小化窗口
public static void FullOrMin(this Window window) { //如果是全屏,则最小化 if (win ...
- [转]如何编写和应用Java的自定义异常类
编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程.常用的编写自定义异常类的模式如下: public class CustomException exten ...