第十八章 使用SQL整合網頁與資料庫.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
萬用字元 在 Access 內執行 SQL 指令時,有兩個最重要的萬用字元 「?」:比對一個字元 「*」:比對多個字元 說明 若要在 ASP 的程式碼內使用 SQL 的萬用字元,必須將「?」改為「_」,「*」改為「%」,以符合一般 SQL 語言的標準規範。 */69 18-5:資料隱碼(SQL Injection) 本小節介紹各種因為ASP與資料庫整合時的疏失,使得他人可以使用非法途徑來取的資料庫內容,或者進行其它侵入。 */69 SQL Injection簡介 「資料隱碼」(SQL Injection)臭蟲,簡單地說,就是將「帳號」和「密碼」填入具有單引號的特殊字串,造成伺服器端在接合這些欄位資料時,會意外地產生合格的 SQL 指令,造成密碼認證的成功。要特別注意的是,SQL Injection 的問題不限只發生在哪種特定平台或語言,只要是使用 SQL 指令存取資料庫內的資料,都有可能產生這個問題。 */69 範例18-7(1) 主題:以資料庫內之資料進行密碼認證:基本篇 連結:執行結果 檢視原始碼 程式碼重點 說明 看起來一切沒問題,但是如果你想「駭」(Hack!) 這個網站,事實上只要輸入下列資料就可以了: 帳號:*****(亂打一通) 密碼: or a=a SQL = select * from password where userid= + Request(user) + and passwd= + Request(passwd) + ; */69 範例18-7(2) 說明 當輸入帳號和密碼分別是「林政源」和「gavins」時,可以從資料庫中查到一筆資料,代表帳號和密碼正確,所得到的 SQL 指令是 當我們帳號和密碼分別是「xyz」和「 or a=a」時,所產生的 SQL 指令也會執行成功(因為 a=a 是一定成立的) 在 SQL 語法的條件式中,會先執行 and,再執行 or。 SQL = select * from password where userid=林政源 and passwd=gavins; SQL = select * from password where userid=xyz and passwd= or a=a; */69 避免SQL Injection 最簡單的作法,就是在取用客戶端送進來的資料前,先刪除所有可能造成問題的特殊字元。 這些字元包括單引號(‘)、雙引號(“)、問號(?)、星號 (*)、底線(_)、百分比(%)、Ampersand()等,這些特殊字元都不應該出現在使用者輸入的資料中。 刪除特殊字元的動作務必 要在伺服器端進行,因為用戶端的 JavaScript 表單驗證的檢查是只能防君子,不能防小人,別人只要做一個有相同欄位的網頁,就一樣可以呼叫你的 ASP 程式碼來取用資料庫,進而避開原網頁的表單驗證功能。 */69 範例18-8 主題:使用replace()避免 SQL Injection 連結:執行結果 檢視原始碼 程式碼重點 說明 在上述原始碼中,因為 Request(userid) 和 Request(passwd) 的資料是無法修改的,所以在取代前要先存到另一個個變數。由此範例可以知道,只要刪除使用者輸入字串中的所有單引號,就可以避免 SQL Injection 的問題。 user = user.replace(//g, ); passwd = passwd.replace(//g, ); */69 參考資料 可以形成 SQL Injection 的惡意字串還不少,但大部分是針對微軟的 SQL Server 資料庫來進行破壞。 以下是參考資料: SQL Injection 的因應與防範之道.mht 駭客的 SQL填空遊戲(上).mht 駭客的 SQL填空遊戲(下).mht Google 打入「登入」,再對需要登入的網站進行 SQL Injection 的測試,就應該可以找到一些不設防的網站。請千萬不要作惡,可以通知該網站管理員此訊息,並表示自己無惡意。 */69 檢示資料範例(1) 我們以資料庫 basketball.mdb 為例,這個資料庫包含兩個資料表: Player 包含球員的資料,其中 TeamID 是球員所隸屬的籃球隊代號(載明在 Team 資料表),Percentage 是投籃的命中率。 Team 包含籃球隊的資料,其中 WinNo 是本季的贏球次數。 */69 檢示資料範例(2) SELECT * FROM Team 意義:所有球隊資料 說明:「*」代表 Team 資料表中所有的欄位 查詢結果: ID Name WinNo 1? 台北隊? 12? 2? 新竹隊? 7? 3? 台中隊? 10? 4? 南投隊? 12

文档评论(0)

倾国倾城 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档