SQL高手请进!数据库字段名被暴!怎么办?
我用的是ACCESS,我对于ASP的安全防范还不是很好~我的一个网站的留言板是用ASP+access做的,最近经常有些人在我的空间留言,其留言后,竟然将我的数据表中的字段...
我用的是ACCESS,我对于ASP的安全防范还不是很好~
我的一个网站的留言板是用ASP+access做的,最近经常有些人在我的空间留言,其留言后,竟然将我的数据表中的字段名暴露出来.
如一般我们留言板的设的字段为:id(编号),name(昵称),about(内容),留言者留言后,竟然出现如:
$(name)或$(name:n)的留言!
他怎么知道我的数据库字段名的?怎么防范啊?
什么漏洞呢?能指出来一下吗? 展开
我的一个网站的留言板是用ASP+access做的,最近经常有些人在我的空间留言,其留言后,竟然将我的数据表中的字段名暴露出来.
如一般我们留言板的设的字段为:id(编号),name(昵称),about(内容),留言者留言后,竟然出现如:
$(name)或$(name:n)的留言!
他怎么知道我的数据库字段名的?怎么防范啊?
什么漏洞呢?能指出来一下吗? 展开
展开全部
网站程序做的不够完善,也就是说有漏洞,防范安全不到位啊!
做网站的时当有参数传递的时候,一定要把参数过滤后再写进SQL语句,把所谓的“网络黑客”给打倒在注入的起跑线上!
不明白的话百度一下“SQL注入”,你就会发现一个防范不到位的网站风险有多大了!
给你一个过滤参数的简单实用的代码段:
<%
Function CheckNum(Default,Num)
If Num=1 Then
If isNumerice(Default) Then
CheckNum=Int(Default)
Else
Response.write"参数传入有误,必须为数字型!"
Response.End()
End If
Else
If Num=0 Then
If Trim(Default)<>"" Then
CheckNum=Replace(Replace(Replace(Replace(Replace(Default,"'",""),"update",""),"Insert",""),"Select",""),"Execute","")
Else
Response.write"参数不能为空!"
Response.End()
End If
End If
End function
%>
Num取值范围:(0,1)
为0时:传递过来的参数是文本型
为1时:传递过来的参数是数字型
Default:表示传递过来的参数
举例说明给你看:
产品显示页(Product_Show.asp):
一定会有从产品列表传递过来的参数,那么Product_show.asp在处理传递来的参数时应该是:Product_show.asp?id=**&Class=**这种形式,在接收时就用上了刚才的CheckNum(),方法如下:
<%
Dim id,class
id=CheckNum(Request("id"),1)
Class=CheckNum(Request("Class"),0)
sql="Select * from Product where id="& id &" and class='"& Class &"'"
rs.open sql,conn,1,1
%>
大致就是如此这些了,加上这样的一个过滤,相对来说比不加过滤要安全多了!
这只是显示页面的处理思路,其它的用到参数传递时也是如此,不明白再问!
做网站的时当有参数传递的时候,一定要把参数过滤后再写进SQL语句,把所谓的“网络黑客”给打倒在注入的起跑线上!
不明白的话百度一下“SQL注入”,你就会发现一个防范不到位的网站风险有多大了!
给你一个过滤参数的简单实用的代码段:
<%
Function CheckNum(Default,Num)
If Num=1 Then
If isNumerice(Default) Then
CheckNum=Int(Default)
Else
Response.write"参数传入有误,必须为数字型!"
Response.End()
End If
Else
If Num=0 Then
If Trim(Default)<>"" Then
CheckNum=Replace(Replace(Replace(Replace(Replace(Default,"'",""),"update",""),"Insert",""),"Select",""),"Execute","")
Else
Response.write"参数不能为空!"
Response.End()
End If
End If
End function
%>
Num取值范围:(0,1)
为0时:传递过来的参数是文本型
为1时:传递过来的参数是数字型
Default:表示传递过来的参数
举例说明给你看:
产品显示页(Product_Show.asp):
一定会有从产品列表传递过来的参数,那么Product_show.asp在处理传递来的参数时应该是:Product_show.asp?id=**&Class=**这种形式,在接收时就用上了刚才的CheckNum(),方法如下:
<%
Dim id,class
id=CheckNum(Request("id"),1)
Class=CheckNum(Request("Class"),0)
sql="Select * from Product where id="& id &" and class='"& Class &"'"
rs.open sql,conn,1,1
%>
大致就是如此这些了,加上这样的一个过滤,相对来说比不加过滤要安全多了!
这只是显示页面的处理思路,其它的用到参数传递时也是如此,不明白再问!
展开全部
ASP是不是自己写的?虽然我不是太懂ASP不过我想有可能是你显示的sql写法问题 比如存名字的时候
String sql="insert into 表(name) values("+$name+")"
是不是写成了
String sql="insert into 表(name) values($name)"
变量是不带引号的
另外设计数据库的时候也可以有一定技巧,比如name id type这些,都可以把表名加上 比如student中 字段就是stu_name stu_id...之类
这样做好处是别人不容易猜对你的字段,另外这样避免了不同表中字段名重复,简化了很多sql写法
String sql="insert into 表(name) values("+$name+")"
是不是写成了
String sql="insert into 表(name) values($name)"
变量是不带引号的
另外设计数据库的时候也可以有一定技巧,比如name id type这些,都可以把表名加上 比如student中 字段就是stu_name stu_id...之类
这样做好处是别人不容易猜对你的字段,另外这样避免了不同表中字段名重复,简化了很多sql写法
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ASP代码有漏洞
没有对参数进行过滤
没有对参数进行过滤
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |