在ASP程式中執行SQL語句的安全性問題 (轉)
在中,如果我們的不當,就有可能面臨被別人控制的危險
以下是一個簡單的更改密碼的程式碼
---------------------
username=request("user_name")
pwd=request("pwd")
username=replace(username,"'","''")
pwd=replace(pwd,"'","''")
="update tbl_test set pwd='" & pwd & "' where uid='" & username & "'"
set rs=conn.execute (sql)
--------------
現在,假如我註冊一個使用者,使用者名稱為 aa'; exec sp_addlogin 'haha
當該使用者更改密碼時(假設改為pp),會出現什麼後果呢??
sql變為 update tbl_test set pwd='pp' where uid='aa' ; exec sp_addlogin 'haha'
結果是使用者密碼沒有被修改,因為沒有 aa這個使用者,
但在你的資料庫中建立了一個登陸,新登陸名為 haha
將使用者名稱稍加修改,實際上可以執行任何sql語句,任何sql過程
而這一切都在你不知情的情況下發生的,實際上,上面的只是一個
示範,稍微修改一下使用者名稱,我們可以做新增一個a賬號,刪除所
有紀錄,讀取使用者密碼等越權操作。
解決的辦法:
在你使用引數前,對引數進行嚴格檢驗,尤其是使用者輸入的引數
不但要對其資料型別,長度進行檢查,還要對其內容進行檢查。
我們再看一段程式碼。(使用者登陸)
username=request("user_name")
pwd=request("pwd")
username=replace(username,"'","''")
pwd=replace(pwd,"'","''")
sql=" uid,pwd from account where uid='" & username & "' and pwd='" & pwd "'"
rs.open sql,conn,1,1
if not rs.eof then
response.write rs(0) & "歡迎您,您已登陸成功"
else
response.write "登陸失敗,錯誤的使用者名稱或密碼"
end if
............
以上程式的是顯而易見的
我們可以以 使用者名稱: admin 密碼: a' or '1'='1
輕易以admin的賬號登陸系統
因為我們的sql 變為了
select uid,pwd from account where uid='admin' and pwd='a' or '1'='1'
顯然 uid='admin' and pwd='a' or '1'='1'是恆為成立的所以 rs.eof 為false
正確的寫法應為
sql="select uid,pwd from account where uid='" & username & "' and pwd='" & pwd "'"
rs.open sql,conn,1,1
if rs(0)=username and rs(1)=pwd then
response.write rs(0) & "歡迎您,您已登陸成功"
else
response.write "登陸失敗,錯誤的使用者名稱或密碼"
end if
----全文完--------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989638/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一條SQL語句在MySQL中如何執行的MySql
- 一條 SQL 語句在 MySQL 中是如何執行的?MySql
- 一條sql語句在mysql中是如何執行的MySql
- sql語句如何執行的SQL
- mysql的sql語句執行流程MySql
- SQL 語句的執行順序SQL
- SQL語句執行順序SQL
- Laravel 獲取執行的sql語句LaravelSQL
- 怎樣在sqlite3上執行SQL語句SQLite
- Mybatis 動態執行SQL語句MyBatisSQL
- 後臺執行SQL語句(oracle)SQLOracle
- mysql執行sql語句過程MySql
- sql語句執行緩慢分析SQL
- 查詢Oracle正在執行的sql語句及執行該語句的使用者OracleSQL
- SQL Server 查詢歷史執行的SQL語句SQLServer
- Oracle行轉列、列轉行的Sql語句總結OracleSQL
- SQL語句中的AND和OR執行順序問題SQL
- Laravel 框架查詢執行的 SQL 語句Laravel框架SQL
- 一條sql語句的執行過程SQL
- SQL語句各子句的執行順序SQL
- sql語句的程式設計手冊(轉)SQL程式設計
- 探究Spring中Bean的執行緒安全性問題SpringBean執行緒
- java連線oracle執行sql語句JavaOracleSQL
- MySQL cron定時執行SQL語句MySql
- [20211221]分析sql語句遇到的問題.txtSQL
- python關於pymysql 執行sql語句in的用法PythonMySql
- 一條SQL更新語句是如何執行的?SQL
- Hive SQL語句的正確執行順序HiveSQL
- 一條SQL更新語句是如何執行的SQL
- SQL 查詢語句的執行順序解析SQL
- 一條update SQL語句是如何執行的SQL
- 一條更新的SQL語句是如何執行的?SQL
- Mybatis原始碼解析之執行SQL語句MyBatis原始碼SQL
- [20181119]sql語句執行緩慢分析.txtSQL
- mysql sql語句執行超時設定MySql
- 多執行緒的安全性問題(三)執行緒
- 一條 SQL 查詢語句是如何執行的?SQL
- Oracle執行語句跟蹤 使用sql trace實現語句追蹤OracleSQL
- 輸入的查詢 SQL 語句,是如何執行的?SQL