View Source
Go Back to /jang/books/asp/example/database/sqlInjection01.asp
<%@ language="jscript" %>
<% title="以資料庫內之資料進行密碼認證:如何避免 SQL Injection" %>
<!--#include file="../head.inc"-->
<hr>
<% //利用ASP內建的Request物件取得表單欄位的「帳號」及「密碼」,'並判斷是否為空白。
x=Request("user")+"";
y=Request("passwd")+"";
if ((x=="undefined") && (y=="undefined")){ %>
<% //顯示原有的表單欄位 %>
<form method="post">
請輸入帳號及密碼:
<ul>
<li>帳號:<Input name="user" value="林政源"><br>
<li>密碼:<Input type="password" name="passwd" value="gavins">
<p><input type=submit><input type=reset>
</ul>
</form>
(提示:按 F7 可以輸入 SQL Injection 所用之帳號和密碼!)
<SCRIPT>
function fillForm() {
if (event.keyCode==118) {
document.forms[0].user.value="這是任意字串"
document.forms[0].passwd.value="' or 'a'='a"
}
}
</SCRIPT>
<SCRIPT>document.onkeydown=fillForm;</SCRIPT>
<hr>
<!--#include file="../foot.inc"-->
<% Response.End(); // 結束網頁 %>
<%}%>
<% //顯示查詢資料庫結果
//=======取得表單欄位內容
user = Request("user")+"";
passwd = Request("passwd")+"";
user = user.replace(/'/g, ""); //刪除單引號以避免 SQL Injection
passwd = passwd.replace(/'/g, ""); //刪除單引號以避免 SQL Injection
//=======建立ADO Connection,然後開啟Access資料庫
Conn = Server.CreateObject("ADODB.Connection");
database = "password.mdb";
Conn.ConnectionString = "DBQ=" + Server.MapPath(database) + ";Driver={Microsoft Access Driver (*.mdb)};Driverld=25;FIL=MS Access;";
Conn.Open();
//=======從資料表中比較userid與passwd兩個欄位,看看是否和表單欄位user及passwd相同。
SQL = "select * from password where userid='" + user + "' and passwd='" + passwd + "'";
RS=Conn.Execute(SQL);
if (RS.EOF) {%>
<p align=center>帳號或密碼錯誤!<br>SQL指令 = "<u><font color=green><%=SQL%></font></u>"
<%} else {%>
<p align=center>帳號及密碼正確!<br>SQL指令 = "<u><font color=green><%=SQL%></font></u>"
<%}
//======關閉資料庫
RS.Close();
Conn.Close();
%>
<hr>
<!--#include file="../foot.inc"-->