防止SQL注入
来源:互联网 发布:贵州发展大数据带动 编辑:程序博客网 时间:2024/05/22 06:24
SQL注入问题:所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到
那我们改如何防止SQL注入呢?办法如下
1.查看和修改等的权限分离
2.过滤所有用户输入
3.把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令
4.用存储过程来执行所有的查询
5.完善用户输入的的长度和类型等验证
6.检查用户输入的合法性
7.将用户登录名称、密码等数据加密保存
VB SQL注入问题以及解决办法之一:
EG:当我们获取SQL表单时会写如下代码:
<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:14px;">txtSQL = "select * from user_Info where user_ID = '" & txtUserName.Text & "'"Set mrc = ExecuteSQL(txtSQL, MsgText)</span></span>
如果在用户名字段中输入: abc'or 1=1或是在密码字段中输入: 123' 将绕过验证。原理 :因为我们 在上述语句中写了user_ID = ‘ 所以当我们输入 'or 1=1 时赋给txtSQL的就为
select * from user_Info whereuser_ID ='abc’ or 1=1 用户名前半部分就给注释掉了 而系统获得的则为 1=1 密码类似。不管用户输入任何用户名与密码,此语句永远都能正确执行,用户轻易骗过系统,获取合法身份。
即为 ''被注释掉了1=1当然是正确的呀,密码与用户名类似,这样就会绕过验证了。
解决办法之一:我们禁止特殊字符的输入,代码如下:
<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:14px;">Private Sub txtUserName_change() Dim s As String, ss As Long, l As Long Dim i As Long s = ",。、;’【】·!@#¥%……&*()——+|~《》?:“{}',.;\/:*?""<>|{}[]!@#$%$^&()~`_-+=" '需要禁止的字符都放这里吧& _</span></span>
<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:14px;">_ (这里我将中文英文的符号都放进来了) ss = txtUserName.SelStart For i = 1 To Len(s) l = Len(txtUserName.Text) txtUserName.Text = Replace(txtUserName.Text, Mid(s, i, 1), "") Next txtUserName.SelStart = ssEnd Sub</span></span>
.NET防SQL注入方法
1,利用SqlCommand传参数的方法:
<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:14px;">string strSQL="SELECT * FROM [user] WHERE user_id=@id";SqlCommand cmd = new SqlCommand();cmd.CommandText = strSQL;cmd.Parameters.Add("@id",SqlDbType.VarChar,20).Value=Request["id"].ToString();</span></span>
2,过滤禁止运行法:
<span style="font-size:18px;">/// <summary>/// 过滤SQL语句,防止注入/// </summary>/// <param name="strSql"></param>/// <returns>0 - 没有注入, 1 - 有注入 </returns>public int filterSql(string sSql){ int srcLen, decLen = 0; sSql = sSql.ToLower().Trim(); srcLen = sSql.Length; sSql = sSql.Replace("exec", ""); sSql = sSql.Replace("delete", ""); sSql = sSql.Replace("master", ""); sSql = sSql.Replace("truncate", ""); sSql = sSql.Replace("declare", ""); sSql = sSql.Replace("create", ""); sSql = sSql.Replace("xp_", "no"); decLen = sSql.Length; if (srcLen == decLen) return 0; else return 1; }</span>
3,存储过程
js版的防范SQL注入式攻击代码:
<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:14px;"><script language="javascript"><!--var url = location.search;var re=/^\?(.*)(select%20|insert%20|delete%20from%20|count\(|drop%20table|update%20truncate%20|asc\(|mid\(|char\(|xp_cmdshell|exec%20master|net%20localgroup%20administrators|\"|:|net%20user|\|%20or%20)(.*)$/gi;var e = re.test(url);if(e) { alert("地址中含有非法字符~"); location.href="error.asp";}//--><script></span></span>
总结:通过周洲大神的指点,我知道了SQL注入这一概念,并知道了为什么会产生,以及一些解决办法。通过一些程序源码对SQL的攻击进行了简单的分析,作为一名开发人员,一定不要盲目相信用户的输入,而要对用户输入的数据进行严格的校验处理,否则的话,将会造成巨大麻烦。
1 0
- 防止sql注入
- asp 防止SQL注入
- sql注入防止办法
- sql注入防止办法
- 怎么防止[SQL注入
- 如何防止SQL注入
- 防止sql注入
- SQL注入防止攻击
- 防止sql注入攻击
- 防止SQL注入
- 如何防止SQL注入
- 防止SQL注入
- 防止SQL注入攻击
- 防止sql注入
- 防止SQL注入攻击
- 网站防止SQL注入
- java防止sql注入
- sql防止注入 连接
- 周大侠的《选择性集成》
- 证明一个数能被3整除,当且仅当它的各位数的和能被3整除!
- 筛选素数产生器
- Java复习笔记-第三部分
- 判断一个数是否是素数
- 防止SQL注入
- Java复习笔记-第四部分
- fpga中add ip核的输出截位问题
- 一些细节吧(随时更新)
- 你真的了解visible属性吗
- ANSI C和POSIX
- Auto-Reload Your Vimrc
- hdu 1536 OR poj 2960 S-Nim 博弈论,,求出SG'函数就可以解决
- 对NSOperation/NSOperationQueue的理解