username = Request.form("username");
password = Request.form("password");
var rso = Server.CreateObject("ADODB.Recordset");
var sql = "select * from users where username = '" + username + "' and password = '" + password + "'"; trace( "query: " + sql );
rso.open( sql, cn );
if (rso.EOF) {
rso.close();
%>
<FONT Face='tahoma' color='cc0000'>
<H1> <BR><BR>
<CENTER>ACCESS DENIED</CENTER>
</H1>
</BODY>
</HTML>
<% Response.end return; }
else {
Session("username") = "" + rso("username");
%>
<FONT Face='tahoma' color='00cc00'>
<H1> <CENTER>ACCESS GRANTED<BR> <BR>
Welcome, <% Response.write(rso("Username")); Response.write( "</BODY></HTML>" ); Response.end }
}
function Main() { //Set up connection
var username
var cn = Server.createobject( "ADODB.Connection" );
cn.connectiontimeout = 20;
cn.open( "localserver", "sa", "password" );
username = new String( Request.form("username") );
if( username.length > 0) {
Login( cn );
}
cn.close();
}
Main();
%>
出現問題的地方是process_lgin.asp中產生查詢語句的部分:
Var sql="select * from users where username='"+username+"' and password='"+password+"'";
如果用戶輸入的信息如下:
Username:';drop table users—
Password:
數據庫中表users將被刪除,拒絕任何用戶進入應用程序。'—'符號在Transact-SQL中表示忽略'—'以后的語句,';'符號表示一個查詢的結束和另一個查詢的開始。'—'位于username字段中是必須的,它為了使這個特殊的查詢終止,并且不返回錯誤。
文章來源于領測軟件測試網 http://www.kjueaiud.com/