问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ASP英文单词防SQL注入问题,请教各位

发布网友 发布时间:2022-04-23 06:28

我来回答

4个回答

热心网友 时间:2023-10-05 09:29

用replace函数和trim
具体代码如下
<%@language=vbscript codepage=936 %>
<!--#include file="Conn.asp"-->
<!--#include file="../Inc/Config.asp"-->
<!--#include file="inc/md5.asp"-->

<%
dim sql,rs
dim username,password,CheckCode
username=replace(trim(request("username")),"'","")
password=replace(trim(Request("password")),"'","")
CheckCode=replace(trim(Request("CheckCode")),"'","")
if UserName="" then
FoundErr=True
ErrMsg=ErrMsg & "<br><li>用户名不能为空!</li>"
end if
if Password="" then
FoundErr=True
ErrMsg=ErrMsg & "<br><li>密码不能为空!</li>"
end if
if CheckCode="" then
FoundErr=True
ErrMsg=ErrMsg & "<br><li>验证码不能为空!</li>"
end if
if session("CheckCode")="" then
FoundErr=True
ErrMsg=ErrMsg & "<br><li>你登录时间过长,请重新返回登录页面进行登录。</li>"
end if
if CheckCode<>CStr(session("CheckCode")) then
FoundErr=True
ErrMsg=ErrMsg & "<br><li>您输入的确认码和系统产生的不一致,请重新输入。</li>"
end if
if FoundErr<>True then
password=md5(password)
set rs=server.createobject("adodb.recordset")
sql="select * from Admin where password='"&password&"' and username='"&username&"'"
rs.open sql,conn,1,3
if rs.bof and rs.eof then
FoundErr=True
ErrMsg=ErrMsg & "<br><li>用户名或密码错误!!!</li>"
else
if password<>rs("password") then
FoundErr=True
ErrMsg=ErrMsg & "<br><li>用户名或密码错误!!!</li>"
else
RndPassword=GetRndPassword(16)
rs("LastLoginIP")=Request.ServerVariables("REMOTE_ADDR")
rs("LastLoginTime")=now()
rs("LoginTimes")=rs("LoginTimes")+1
rs("RndPassword")=RndPassword
rs.update
session.Timeout=SessionTimeout
session("AdminName")=rs("username")
session("AdminPassword")=rs("Password")
session("RndPassword")=RndPassword
rs.close
set rs=nothing
call CloseConn()
Response.Redirect "default.asp"
end if
end if
rs.close
set rs=nothing
end if
if FoundErr=True then
call WriteErrMsg()
end if
call CloseConn()

'****************************************************
'过程名:WriteErrMsg
'作 用:显示错误提示信息
'参 数:无
'****************************************************
sub WriteErrMsg()
dim strErr
strErr=strErr & "<html><head><title>错误信息</title><meta http-equiv='Content-Type' content='text/html; charset=gb2312'>" & vbcrlf
strErr=strErr & "<link href='style.css' rel='stylesheet' type='text/css'></head><body>" & vbcrlf
strErr=strErr & "<table cellpadding=2 cellspacing=1 border=0 width=400 class='border' align=center>" & vbcrlf
strErr=strErr & " <tr align='center'><td height='22' class='title'><strong>错误信息</strong></td></tr>" & vbcrlf
strErr=strErr & " <tr><td height='100' class='tdbg' valign='top'><b>产生错误的可能原因:</b><br>" & errmsg &"</td></tr>" & vbcrlf
strErr=strErr & " <tr align='center'><td class='tdbg'><a href='Login.asp'><< 返回登录页面</a></td></tr>" & vbcrlf
strErr=strErr & "</table>" & vbcrlf
strErr=strErr & "</body></html>" & vbcrlf
response.write strErr
end sub

Function GetRndPassword(PasswordLen)
Dim Ran,i,strPassword
strPassword=""
For i=1 To PasswordLen
Randomize
Ran = CInt(Rnd * 2)
Randomize
If Ran = 0 Then
Ran = CInt(Rnd * 25) + 97
strPassword =strPassword & UCase(Chr(Ran))
ElseIf Ran = 1 Then
Ran = CInt(Rnd * 9)
strPassword = strPassword & Ran
ElseIf Ran = 2 Then
Ran = CInt(Rnd * 25) + 97
strPassword =strPassword & Chr(Ran)
End If
Next
GetRndPassword=strPassword
End Function
%>

热心网友 时间:2023-10-05 09:30

采用过滤得方式避免注射,会使得代码臃肿、效率低下,且效果不好,如果你使用adodb.command 中的参数绑定的方式去处理,会有更好的效果,换句话说,客户端传过来的参数不再参与SQL语句的生成,这样会更安全有效。如果你看过ibits的sqlmap,你就能很好理解这种模式了。我在ASP中实现SQLMAP,不仅代码简单,而且效率不错。

热心网友 时间:2023-10-05 09:30

如果是访问量很少 添加Global.asax文件 在
protected void Application_BeginRequest(object sender, EventArgs e)
{
StartProcessRequest();
} 方法调用替代方法就行了
给你代码自己看
private void StartProcessRequest()
{
try
{
string getkeys = "";

if (System.Web.HttpContext.Current.Request.QueryString != null)
{

for (int i = 0; i < System.Web.HttpContext.Current.Request.QueryString.Count; i++)
{
getkeys = System.Web.HttpContext.Current.Request.QueryString.Keys[i];
if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys]))
{
// 替换什么的 随你自己
}
}
}
if (System.Web.HttpContext.Current.Request.Form != null)
{
for (int i = 0; i < System.Web.HttpContext.Current.Request.Form.Count; i++)
{
getkeys = System.Web.HttpContext.Current.Request.Form.Keys[i];
if (getkeys == "__VIEWSTATE") continue;
if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys]))
{
// 替换什么的 随你自己
}
}
}
}
catch
{

}
}
/// <summary>
/// 分析用户请求是否正常
/// </summary>
/// <param name="Str">传入用户提交数据 </param>
/// <returns>返回是否含有SQL注入式攻击代码 </returns>
private bool ProcessSqlStr(string Str)
{
bool ReturnValue = true;
try
{
if (Str.Trim() != "")
{
string SqlStr = "exec|insert|select|delete|update|mid|master|truncate|declare"; //可以写其他的要被过滤的单词
string[] anySqlStr = SqlStr.Split('|');
foreach (string ss in anySqlStr)
{
int i = Str.ToLower().IndexOf(ss);
if (Str.ToLower().IndexOf(ss)>=0)
{
ReturnValue = false;
break;
}
}
}
}
catch
{
ReturnValue = false;
}
return ReturnValue;
}

楼上也说了 这种效率低 最好还是 参数化处理

热心网友 时间:2023-10-05 09:31

replace(info,"select","select")
这样不就可以了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...开了一个小口有一点肉出来了触角也是,怎么碰都不缩回去,是死了吗 盗窃罪的可以免于刑事处罚吗 镇江新区森宇智能安防工程有限公司怎么样? 无锡聚瑞隆包装有限公司怎么样? 昆山科正荣电子材料有限公司怎么样? 无锡正荣钢铁贸易有限公司怎么样? 东莞市正荣数控刀具有限公司怎么样 IDEA的Web项目启动Tomcat出现404错误 男友刚刚说我们性格不合分手了,看到他刚刚在微信朋友圈发的说说 ...原因说性格不合,很难接受我冲动起来就把他微信关了,现在 ASP英文单词防SQL注入问题,请教各位 刚才的问题怎么给失效了。。。继续求大神,谢谢了, SqlServer2005显示被黑客sql注入,现在打登陆不上去 如何在PHP中阻止SQL注入? 如何在PHP中阻止SQL注入? COOKIES注入中 IIS显示404错误 SQL注入攻击的种类有哪些 什么是网站注入 cs1.6安装新的SXE4.2后出现注入游戏错误 请问一下网站注入点是什么意思,注入点是根据什么检验的 啊D注入工具 是干什么的工具? 为什么易语言输入法注入会显示应用程序错误 注入错误,请重新运行 是什么意思? cs1.6挂不上SXE4.3的所有版本,显示注入错误这是什么? cs1.6开SXE怎么显示注入错误 苹果手机天气预报为什么搜不到小城市 苹果手机天气不可用怎么解决? 苹果的天气系统为什么查不到县城的天气 苹果手机天气预报,怎么不能显示我的所在地的详细地方 为什么苹果手机添加天气一直验证城市? 苹果8p自带天气搜不到任何城市 (ps:实体店购入的新机)县市也搜不到 求解 不显示错误信息能防止sql 注入吗 不显示错误信息能防止sql 注入吗 开SXE进游戏 ( CS1.6 )提示 注入游戏错误SXE Injected 关闭,请高手指点下 开SXE进游戏 ( CS1.6 )提示 注入游戏错误SXE Injected 关闭,请高手指点下 sql注入 ;附近有语法错误 sql注入 ;附近有语法错误 为什么通过配置文件为构造函数函数传参显示错误 为什么通过配置文件为构造函数函数传参显示错误 打开CS_007,然后进入CS1.6,却显示错误:unable to inject dll into target,是什么 打开CS_007,然后进入CS1.6,却显示错误:unable to inject dll into target,是什么 求教~谁给讲讲SQL注入别的的步骤 求教~谁给讲讲SQL注入别的的步骤 惠普打印机黑色墨盒已加墨水,为何显示墨水不足 柠檬的最佳储存方法 海螺如何保鲜? 大海螺买回来想明天吃该怎么放? 朋友给了好多新鲜柠檬怎么保存 海螺怎么储存? 海螺保存时间? 哪种洗发露能止 脱?