主题:大家是如何防止sql注入的?
rxtang
[专家分:350] 发布于 2009-05-06 12:10:00
asp网站很多时候被注入些js或者iframe脚本病毒,按照网上提供的防sql注入的方法 好像都不是很有效,大家介绍下自己是怎么做的~
回复列表 (共5个回复)
沙发
linxuanxu [专家分:9360] 发布于 2009-05-06 16:00:00
从程序上一般就是过滤。
从数据库上有的人编写存储过程,但是我认为移植性差,而且麻烦。
然后我认为最有必要的就是建立不同用户权限,进行数据库操作比较关键。
另外最好表单名不要起和数据库字段一样的名字提高猜表猜字段的难度。其余的...
板凳
历山舜华 [专家分:0] 发布于 2009-05-16 17:22:00
Sub chkquerystring() '过滤非法字符
Dim strTemp1,strTemp2,bFlag
bFlag = FALSE
strTemp1 = LCase(Request.ServerVariables("Query_String"))
strTemp2 = LCase(Request.QueryString())
If strTemp1 = "" Or strTemp2 = "" Then Exit Sub
If InStr(strTemp1,chr(34)) > 0 Then bFlag = TRUE
If InStr(strTemp1,"'") > 0 Then bFlag = TRUE
If InStr(strTemp1,";") > 0 Then bFlag = TRUE
If InStr(strTemp2,chr(34)) > 0 Then bFlag = TRUE
If InStr(strTemp2,"'") > 0 Then bFlag = TRUE
If InStr(strTemp2,";") > 0 Then bFlag = TRUE
If InStr(strTemp1,"select") > 0 Then bFlag = TRUE
If InStr(strTemp1,"update") > 0 Then bFlag = TRUE
If InStr(strTemp1,"insert") > 0 Then bFlag = TRUE
If InStr(strTemp1,"delete") > 0 Then bFlag = TRUE
If bFlag Then
Call showmessages(strWarn,"系统检测到正在遭受非法攻击,系统终止运行,停止响应。如果您确认未输入非法内容,请联系系统管理员。")
Response.End
End If
End Sub
把那些乱七八糟的SQL关键字过滤掉就行了 我一直是这么做的
3 楼
daxiaoba [专家分:0] 发布于 2009-05-20 17:09:00
这样很容易绕过的
4 楼
神之左手 [专家分:390] 发布于 2009-06-02 09:43:00
所谓SQL注入是采用一些程序上比较敏感的字符 或者逻辑上的关系表达式达到的SQL插入语句或者修改语句被恶意更改而导致入侵着获得网站后台或者某功能的使用权限 在使用上传漏洞更改网站文件达到黑客的目的。
防止SQL注入(也可以说是提高网站程序安全性)我的一般做法(当然还待自己完善中)
1。永远不要相信客户端传递过来的数据
例如表单提交的时候 你在客户端使用JS规则验证输入的完整性和规范性,但偷懒了 没有在服务器端使用验证规范,则很容易的是 黑客自己构建个表单 其中表单各元素的名称和你的相同 提交到你原表单的提交地址上 在构建过程中又把你JS全部去掉 这样服务器端就等于接受了任何信息.所以一般来讲任何客户端的都可以造假。一定要使用服务器端规范严整。
2。关注我们的浏览器地址栏
地址栏中的参数我们都知道是使用GET方式传递至服务器,同样根据以上原则我们也必须对其采取服务器端的规范验证。另外地址栏输入JAVSCRIPT代码居然也可以执行(前阵子刚接触到这类特殊的问题)所以不得不考虑是否也会带来安全问题(我自己还未曾深入的去研究这个问题)
3。验证规范中使用正则表达式
正则表达式的优点不必多说,但初学的确很不容易理解。本人前后3次认真学习,直到最后一次才豁然开朗。对于ASP VBSCRIP的语法 注释符'是个很头痛的问题 但用正则的[^]排除语法可以很好的实现对其的过滤 其他好处就不必一一多说。
4。页面来源要验证
特别是数据更新操作页面或者权限判断页面 我们都要想一想是否有数据会被重构而传递过来造价的情况。或者说 我们的某个页面 只有在访问其他一个页面 按它上面的连接才可以转到这个页面的情况 是否可以直接在地址栏中输入就可以访问了 诸如这类问题也必须要考虑
5。关键数据必须加密
对于使用COOKIES和SESSION来保存用户权限资料,之前做过很多考虑。而且似乎关注的同时也得到用某中方法可以截获通信时SESSION中的数据资料。可想而知,一旦以明文方式保存的用户信息,密码将一览无余。所以即使是使用SESSION,请加密你的关键信息。一般都采用MD5加密 数据库中的同样也需要加密,判断的话 只需要用循环遍历数据库 找出和SESSION中字符相同的数据库数据 然后赋予权限.
6.数据库安全
SQL SERVER的话 请设置好您的帐户和密码 不要使用空密码 如果只打算本地维护,请只打开WINDOWS登录模式验证而不用混合模式验证。用户中不安全的帐户请删除。赋予权限除管理员,每个帐户只开发其对应的数据库权限。ACCESS的话 请加密你的数据库
5 楼
神之左手 [专家分:390] 发布于 2009-06-02 09:46:00
顺便一提的是 在条件允许的情况下 你可以把代码中数据库连接的程序部分在VB中写成.DLL文件封装 然后在服务器上注册使用 对于我们一般暴露在外的数据库连接程序来讲安全的多
我来回复