怎么防止SQL的注入式攻击呢?
asp.net也可以有这种攻击方式吗? 问题点数:0、回复次数:18Top
1 楼zhouabc(试着专业一点)回复于 2005-06-02 12:30:50 得分 0
有,听说使用存储过程可以防止.Top
2 楼boytomato(深爱一人叫颖的女孩!)回复于 2005-06-02 12:33:02 得分 0
一个函数,代替ASP中的Request函数,可以对一切的SQL注入Say NO,函数如下:
Function SafeRequest(ParaName,ParaType)
‘--- 传入参数 ---
‘ParaName:参数名称-字符型
‘ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)
Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If not isNumeric(ParaValue) then
Response.write “参数” & ParaName & “必须为数字型!”
Response.end
End if
Else
ParaValue=replace(ParaValue,”’”,”’’”)
End if
SafeRequest=ParaValue
End function
http://www.cnblogs.com/gwazy/archive/2005/05/12/153752.html
Top
3 楼boytomato(深爱一人叫颖的女孩!)回复于 2005-06-02 12:37:06 得分 0
1,用存储过程,不过直接用 用户输入累加形成 sql 查询....
2 对用户输入进行严格控制....字符串处理进行过虑 .....
petshop 中对用户输入的参数的判断:
http://www.cnblogs.com/gwazy/archive/2005/05/12/153752.html
Top
4 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-06-02 12:40:11 得分 0
1、用存储过程
2、用SqlParameter
3、过滤字符串Top
5 楼liuqm(blue)回复于 2005-06-02 12:41:37 得分 0
先用Replace()
在就是用带参数的sql语句Top
6 楼jonescheng(小块头无大智慧)回复于 2005-06-02 12:41:47 得分 0
在客户端对输入的字符串进行转义符的转换,和检测过滤
这样可以过滤一层,
在服务端在对敏感字符在进行一次检查,应该可以
Top
7 楼CMIC(大象)回复于 2005-06-02 12:41:51 得分 0
DataAdapter.Update(DataSet)或
参数方式
insert into t1(a1....)
value{@a1}
这l两种方式sql特殊符号都会知道转义,一般不会有什么问题。Top
8 楼jonescheng(小块头无大智慧)回复于 2005-06-02 12:42:45 得分 0
function chkNonChar(obj){
var strInput;
var strNonChar = new Array();
strInput = obj.value;
//本系统非法字符集,要允许加用以下字符,请在前加上“//”
strNonChar[0] = "\'"; //禁用'
strNonChar[1] = "\""; //禁用"
strNonChar[2] = "\\"; //禁用\
strNonChar[3] = "~"; //禁用~
strNonChar[4] = "#"; //禁用#
strNonChar[5] = "$"; //禁用$
strNonChar[6] = "%"; //禁用%
strNonChar[7] = "^"; //禁用^
strNonChar[8] = "&"; //禁用&
strNonChar[9] = "*"; //禁用*
strNonChar[10] = "<"; //禁用<
strNonChar[11] = ">"; //禁用>
strNonChar[12] = "/"; //禁用/
strNonChar[13] = "?"; //禁用?
strNonChar[14] = "|"; //禁用|
strNonChar[15] = "+"; //禁用+
strNonChar[16] = "`"; //禁用`
if (strInput == '') return true;
//在输入的参数中,查找是否有系统定义非法字符
for (var i = 0;i < strNonChar.length; i++){
if ( strInput.indexOf(strNonChar[i]) > -1 ) {
alert('【系统提示】\n\n输入的文字中含有本系统所不允许的非法字符“' + strNonChar[i] + '” !\n\n请重新输入或换用别的字符替代。')
obj.focus();
obj.select();
return false;
}
}
return true;
}Top
9 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-06-02 12:44:13 得分 0
用参数形式的就不会了Top
10 楼sunjian_qi(sonne)回复于 2005-06-02 12:49:20 得分 0
mark一下Top
11 楼ghchen()回复于 2005-06-02 12:50:58 得分 0
来晚了,我知道的楼上的都说了Top
12 楼hchxxzx(NET?摸到一点门槛)回复于 2005-06-02 12:51:36 得分 0
用参数式写入方式可以有效的杜绝注入式攻击,以下为示例
//用参数方式写入数据库
OleDbCommand myComm = this.conn.CreateCommand();
//定义SQL语句
string sql = "insert into " + this.dbTable + "(filename,filenewname,filesize,filemime,fileblob,uploadtime) " +
" values(@filename,@filenewname,@filesize,@filemime,@fileblob,@uploadtime)";
myComm.CommandText = sql;
myComm.Parameters.Add("@filename",OleDbType.VarWChar).Value = fileName;
myComm.Parameters.Add("@filenewname",OleDbType.VarWChar).Value = fileNewName;
myComm.Parameters.Add("@filesize",OleDbType.Integer).Value = fileSize;
myComm.Parameters.Add("@filemime",OleDbType.VarWChar).Value = fileMime;
myComm.Parameters.Add("@fileblob",OleDbType.LongVarBinary,fileBlob.Length).Value = fileBlob;
myComm.Parameters.Add("@uploadtime",OleDbType.DBDate).Value = uploadTime;
//写入数据库
myComm.ExecuteNonQuery();
Top
13 楼redmoonmoon(阿卓)回复于 2005-06-02 12:55:37 得分 0
都说的好清楚噢Top
14 楼lemong(風之影)回复于 2005-06-02 12:55:51 得分 0
SqlParameterTop
15 楼accpdingyi(未来精英)回复于 2005-06-02 13:01:47 得分 0
呵呵,好啊,谢谢大家了Top
16 楼HJ_34(刺桐游子)回复于 2005-06-02 13:09:59 得分 0
1、过虑敏感字符;
1、用存储过程;
2、用SqlParameter参数形式。
其它的就不清楚了。Top
17 楼NeoInMatrix(丈二和尚)回复于 2005-06-02 13:33:44 得分 0
I have two suggestions:
1. Try best to use stored procedures.
2. If you have to use SQL string when creating SqlCommand, do not use string concatenation (& in VB) to create SQL parameter list; instead, use pseudo paramters (@param). Example:
' good
cmd.CommandText = "delete from abc where name = @name"
' bad!
cmd.CommandText = "delete from abc where name = '" & name & "'"
Top
18 楼oneway888(xiaoaoyisheng)回复于 2005-06-02 14:32:43 得分 0
1。用存储过程的参数形式
2。不用sa的帐号,用新建的权限小的帐号
3。删除sql server里面默认的xpsqlcomm
Top




