如果你的Sql语句是这样的,而且没有进行过滤用下列字符可以直接登陆string strsql="select count(*) from userinfo where username='"+this.TextBox1.Text+"' and pwd='"+this.TextBox2.Text+"'";'or 1=1 --
拼接字符串的方式会导致sql注入式攻击 例如 select * from tablename where id='"+ textBox1.Text +"' 可以改成参数的方法 例如 select * from tablename where id=@ID,在程序里利用SqlParameter来做 要不然就全写成存储过程
範例1: strSQL = "SELECT UserName FROM tblAccount WHERE Account='" & Request("Account") & "' AND Password='" & Request("Password") & "' 如此,駭客只要在密碼欄位中輸入一個單引號,測試是否傳回錯誤信息,就可讓具有SQL Injection漏洞的程式現形。 上述程式應改為: 範例2: strSQL = "SELECT UserName FROM tblAccount WHERE Account=@Account AND Password=@Password" Dim cmd As SqlCommand = New SqlCommand(strSQL,strCnn) cmd.Parameters.Add("@Account",SqlDbType.Varchar).Value=Request("Account") cmd.Parameters.Add("@Password",SqlDbType.Varchar).Value=Request("Password")
就前一种原理大体就是地址栏提交语句被后台一并当参数传递到数据库中进行查询,结果造成地址栏提交的SQL语句被数据库正常执行,但因此方式多少带有一定的爆破方式(不包括提交其他SQL语句,因为有时提交到数据库的是可能执行某些危险操作的语句,尤其对于大型数据库是相当危险的),如果利用的属于猜解数据库内容的话,那么查询结果会有2种,成功和不成功,查询成功的话,页面无明显变化,如不成功,页面将出现错误。根据页面变化采用ASCII拆半法等方法最终将数据库内容猜解出来的,对于这种方法的防御,个人采用的方法一个是在取地址栏参数后,利用C#对此参数进行数据类型转换,因基本作为地址栏参数的全是数字,而要提交的SQL语句含有字符,所以,如果进行数据类型转换字符串用int.Parse()的方法将产生错误而使其他代码无法运行,这里可用TRY CATCH 进行下处理,如出现转换错误就跳转到指定页面等,还有另一种方式就是不要让你写的SQL语句尾部可以利用AND或嵌套语句接入新的查询语句。
对于通过登陆窗口提交构造语句基本就是将OR语句写到登陆窗口的密码或用户对话框里提交造成SQL语句错误执行进而导致绕过验证环节,不需要任何登陆帐户就可直接登陆后台,这个的处理办法也是,一个从SQL语句下手,另一个方法是在登陆框内不允许输入如‘ = ’这类特殊字符。如果还不明白,建议去国内的各大黑客站点看看,不如华黑,黑白,黑吧,邪恶八进制等
另外最好是在代码中不要直接使用从WEB页的值(比如用户输入的用户名),用变量转一下.
还有不要在URL里直接传值,通过SESSION来通信.
例如 select * from tablename where id='"+ textBox1.Text +"'
可以改成参数的方法
例如 select * from tablename where id=@ID,在程序里利用SqlParameter来做
要不然就全写成存储过程
你可以搜搜看先,应该可以搜到
http://community.csdn.net/Expert/TopicView3.asp?id=5499401
不一定有用,可以参考一下
for example: 'or 1=1 --或者也可以利用url进行注入总之,方法有很多,但愿lz不是为了注入去注入
另外,在正式環境中,請記得開啟Web.config的CustomError設定,避免程式出錯時,錯誤信息及Debug資訊供駭客更多入侵的指引。
strSQL = "SELECT UserName FROM tblAccount WHERE Account='" & Request("Account") & "' AND Password='" & Request("Password") & "'
如此,駭客只要在密碼欄位中輸入一個單引號,測試是否傳回錯誤信息,就可讓具有SQL Injection漏洞的程式現形。
上述程式應改為:
範例2:
strSQL = "SELECT UserName FROM tblAccount WHERE Account=@Account AND Password=@Password"
Dim cmd As SqlCommand = New SqlCommand(strSQL,strCnn)
cmd.Parameters.Add("@Account",SqlDbType.Varchar).Value=Request("Account")
cmd.Parameters.Add("@Password",SqlDbType.Varchar).Value=Request("Password")
另外,在正式環境中,請記得開啟Web.config的CustomError設定,避免程式出錯時,錯誤信息及Debug資訊供駭客更多入侵的指引。
比如 textBoxID 的长度 你写成最大10 10个字符还能注入啊?
请问RSA加密可以 防止SQL注入攻击么?
请问RSA加密可以 防止SQL注入攻击么?
CSDN 论坛助手
http://china-csdn.cn
同时你在页面中加密这样安全性就会大提高