2014-07-12 123 views
0

我已經與數據庫創建PhoneGap的應用程序,我能夠通過使用數據庫 所以這裏的情況我不知道如何保護別人的數據庫訪問數據庫中的每一頁,因爲任何機構都可以訪問我的數據庫,誰知道數據庫的名稱和版本保護SQLite數據庫中的PhoneGap

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Storage Example</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <script type="text/javascript" charset="utf-8" src="js/cordova.js"></script> 
    <script type="text/javascript" src="js/jquery.js"></script> 
    <script type="text/javascript" charset="utf-8"> 

    // Wait for device API libraries to load 
    document.addEventListener("deviceready", onDeviceReady, false); 

     var db; 
    // Populate the database 
    function populateDB(tx) { 
     alert('Table DEMO will be created'); 
     tx.executeSql('DROP TABLE IF EXISTS DEMO'); 
     tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, firstname, lastname)'); 
     tx.executeSql('INSERT INTO DEMO (id, firstname, lastname) VALUES (1, "Surinaidu", "Majji")'); 
     tx.executeSql('INSERT INTO DEMO (id, firstname, lastname) VALUES (2, "Sarath", "Upadrista")'); 
     tx.executeSql('INSERT INTO DEMO (id, firstname, lastname) VALUES (3, "Yaseen", "shaik")'); 
     tx.executeSql('INSERT INTO DEMO (id, firstname, lastname) VALUES (4, "Yogesh", "Tavaki")'); 
    } 

    // Query the database 
    function queryDB(tx) { 
     tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB); 
    } 

    // Query the success callback 
    function querySuccess(tx, results) { 
     var htmlString = ''; 
     var len = results.rows.length; 
     alert("No of rows in the table " + len); 

     for(var i=0; i<len; i++) { 
     htmlString += '<li>' + results.rows.item(i).id + " " + results.rows.item(i).firstname + " " + results.rows.item(i).lastname + '<br/>' + '</li>'; 
     } 
     $('#listview').html(htmlString); 
     // for an insert statement, this property will return the ID of the last inserted row 
     console.log("Last inserted row ID = " + results.insertId); 
    } 

    // Transaction error callback 
    function errorCB(err) { 
     console.log("Error processing SQL: "+err.code); 
    } 

    // Transaction success callback 
    // 
    function successCB() { 
     alert('successed'); 
     db.transaction(queryDB, errorCB); 
    } 

    // device APIs are available 
    // 
    function onDeviceReady() { 
     alert("Database has been started"); 
     db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000); 
     alert(db); 
     db.transaction(populateDB, errorCB, successCB); 
     return false; 
    } 
    </script> 
    </head> 
    <body bgcolor="yellow"> 
    <h1>Example</h1> 
    <p>Database</p> 
    <br /> 
    <a href="http://www.google.com" >Go to Google page</a> 
    <ul id="listview"></ul> 
    </body> 
</html> 

同樣的事情可以複製到其他頁面,並可以訪問這些數據,我想這是weired,因爲很多人在這裏下載同一應用程序使用相同的數據庫實例 那麼我們如何才能保護來自他人的數據。

+0

'因爲任何人都可以訪問我的數據庫誰知道數據庫的名稱和版本'我不知道其他人會知道您的數據庫名稱和版本。許多人正在使用這種技術! – AtanuCSE

+0

是的,你是對的,但我們如何區分他人的數據。 imean每個身體都可以擁有自己的身份嗎? –

回答

0

一般來說,你的軟件的用戶有更多的控制比你做的SQLite數據庫的權利。你的軟件只是他機器上的訪問者。任何形式的加密都將是security though obscurity,因爲您不能在設備上擁有祕密密鑰。

最後,如果你想保護一個數據庫,那麼你必須承載它。我建議設置一個RESTFUL接口,以便移動設備上的js可以對數據執行操作。你應該假設攻擊者有100%的權限訪問這個RESTFUL接口。你絕不應該暴露像do_query("select ...");這樣的函數。確保你考慮SQL注入。讓我知道任何疑問。

+0

我可以知道什麼是SQL注入? –