<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                **一、WebSQL安全風險簡介** ? ? ? 數據庫安全一直是后端人員廣泛關注和需要預防的問題。但是自從HTML5引入本地數據庫和WebSQL之后,前端開發對于數據庫的安全也必須要有所了解和警惕。WebSQL的安全問題通常表現為兩個部分: ? ? ?第一種是SQL注入:和本地數據庫一樣,攻擊者可以通過SQL注入點來進行數據庫攻擊。 ? ? ?另外一方面,如果Web App有XSS漏洞,那么本地數據很容易泄漏,可以想想本地數據庫里存儲了用戶最近交易記錄或者私信的情況。 **二、WebSQL安全風險詳析** ? ? ?1、SQL注入 ? ? ?例如我們有一個URL為[http:/blog.csdn.net/hfahe?id=1](http://blog.csdn.net/hfahe?id=1),它接收了一個id參數來進行本地數據庫查詢并輸出,對應的SQL語句為“select name from user where id = 1”。 ![](https://box.kancloud.cn/2016-08-09_57a9aa5538d34.jpg) ? ? ?但是針對這個簡單的SQL查詢,攻擊者可以構造一個虛假的輸入數據“1 or 1 = 1”,那么我們的SQL語句將變為“select name from user where id = 1 or 1 = 1”。這就相當糟糕了,因為1=1這個條件總是成立的,那么這條語句將遍歷數據庫user表里的所有記錄并進行輸出。 ![](https://box.kancloud.cn/2016-08-09_57a9aa554ce93.jpg) ? ? ?利用這種方式,攻擊者可以構造多種攻擊的SQL語句,來操縱用戶的本地數據庫記錄。 ??????? 2、XSS與數據庫操縱 ? ? ?在有XSS漏洞的情況下,攻擊者獲取本地數據需要如下幾個步驟: ? ? ?1)獲取JavaScript數據庫對象 ? ? ?2)獲取SQLite上的表結構 ? ? ?3)獲取數據表名 ? ? ?4)操作數據 ? ? ?例如如下腳本完整的實現了上面的步驟,我在Chrome控制臺里運行即可得到用戶本地數據庫的表名,利用這個表名攻擊者可以用任何SQL語句來完成攻擊。 ~~~ var dbo; var table; var usertable; for(i in window) { obj = window[i]; try { if(obj.constructor.name=="Database"){ dbo = obj; obj.transaction(function(tx){ tx.executeSql('SELECT name FROM sqlite_master WHERE type=\'table\'', [], function(tx,results) { table = results; },null); }); } } catch(ex) {} } if(table.rows.length > 1) usertable = table.rows.item(1).name; ~~~ **三、防御之道** ? ? ? 針對WebSQL攻擊,我們有如下方法預防: ? ? ?1)? 檢查輸入類型,過濾危險字符 ? ? ?我們需要保證輸入類型符合預期,例如上面的id參數一定是數字類型;同時過濾掉危險的關鍵字和符號,像PHP里addslashes這個函數的作用一樣。 ? ? ?2)? 在SQL語句中使用參數形式 ? ? ?SQL語句是可以用參數形式的,例如 ~~~ executeSql("SELECTname FROM stud WHERE id=" + input_id) ~~~ ? ? ?這種字符串拼接的形式并不安全,可以換為 ~~~ executeSql("SELECTname FROM stud WHERE id=?“, [input_id]);) ~~~ ? ? ?這樣能保證參數的輸入符合設定的類型。 ? ? ?3)? 謹慎對待每一次SQL操作 ? ? ?無論是select、modify、update或者delete,你編寫的任何一條SQL語句操作都有可能成為攻擊者的攻擊對象,造成重大損失,所以都必須要謹慎對待。 ? ? ?4)? 不要存儲重要數據 ? ? ?本地數據庫永遠透明而不安全,重要的數據必須要存儲在服務器上,本地數據庫里沒有重要數據就不會對用戶造成重大損失。 ? ? ? 5)杜絕XSS漏洞 ? ? ? XSS攻擊的防御將會在專門章節闡述,本文不展開詳析。 ? ? ? 相關文章: ? ? ?《[關注HTML5安全風險](http://blog.csdn.net/hfahe/article/details/7960705)》 ? ? ?《[HTML5安全風險詳析之一:CORS攻擊](http://blog.csdn.net/hfahe/article/details/7961566)》 ? ? ?《[HTML5安全風險詳析之二:Web Storage攻擊](http://blog.csdn.net/hfahe/article/details/7961618)》 ? ? ? 本文為原創文章,轉載請注明:來自[蔣宇捷的博客](http://blog.csdn.net/hfahe):[http://blog.csdn.net/hfahe](http://blog.csdn.net/hfahe)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看