青果软件 漏洞:关于ASP查询SQL数据库

来源:百度文库 编辑:神马品牌网 时间:2024/05/04 14:47:48
我想做个查询数据库的用户名是否存在的程序,在输入的全是数字时程序没有错误,但是在查询的字符是字母时,程序就出错。
代码如下:
提交页:
<table width="97%" height="101" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="21"><div align="center">域名查询</div></td>
</tr>
<tr>
<td height="29"><label>请在此查询您喜欢的域名是否被抢注:</label></td>
</tr><form name="checkname" action="reg_check.asp" method="post">
<tr>
<td height="16"><strong>www.</strong>
<label>
<input name="check" type="text" size="8">
<strong> .c5n.cn</strong><input type="submit" name="Submit3" value="快速查询 "></label></td>
</tr>
<tr>
<td height="14"><label>
<div align="right">

</div>
</label></td></form>
</tr>
</table>

提交时出这样的错:
错误类型:
Microsoft OLE DB Provider for SQL Server (0x80040E14)
列名 'vvvv' 无效。
/cx1/reg_check.asp, 第 12 行

浏览器类型:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TencentTraveler ; .NET CLR 1.1.4322)

网页:
POST 44 ??? /cx1/reg_check.asp

POST Data:
check=vvvv&Submit3=%BF%EC%CB%D9%B2%E9%D1%AF+

处理页:

<%
dim user
user=Replace(Request.Form("check"),"'","''")
%>
<%
Dim Conn,ConnStr
Set conn = Server.Createobject("adodb.connection")
ConnStr = "Provider = sqloledb;User ID=sa;Password=sa;Initial Catalog=scadata;Data Source=(local)"
conn.open ConnStr
sql="Select * from y_yp where y_user="& user
set rs=conn.execute(sql)
if rs.eof or rs.bof then

%>
<center>
<%
response.Write"恭喜您,此域名还没有注册"
Response.Write(user)
%><font size="3">.cn.cn</font><a href=luoye.asp>马上注册</a>!
</center>
<%
else
%>
<center>
<%
response.write("此域名已经存在<a href=luoye.asp>请返回,选择你喜欢的域名</a>")
%><%
rs.close
end if
%>

set rs=conn.execute(sql) 是错在这句么?如果是的话检查y_user的属性,如果是字符型的,把SQL改成sql="Select * from y_yp where y_user='"& user &"'"
如果是数值型的,那你在查询前要加个isnumeric约束,防止程序出错也好防止SQL恶意注入

你用户名类型是不是int型的,如果是那么字符型就不能查了啊