iT邦幫忙

1

如何架設讀取手機端SQL語法並回傳資料庫查詢結果的網站?

我想要:
寫一個安卓的APP,用手機查詢資料庫資料,但是老師說不行,說之前這樣被攻擊過,要我在手機和資料庫中間架設一個網站當中繼點,如下圖所示:

改成下圖


我目前的資料庫是用XAMPP裡的MySQL資料庫
自己也爬了很多文
有查到的內容是用PHP寫,但是還是不太清楚
請問我該用甚麼程式架設這個網站?或是有甚麼能參考的書籍或網站?謝謝各位大神!

slime iT邦大師 1 級 ‧ 2019-07-11 16:28:11 檢舉
建議是跟老師討論"安全性"的程度要到哪?

SQL 通常可以限制來源 IP , 帳號密碼設定較複雜等方式加強.

要架網站的話, 可以先參考 phpMyAdmin 的架構, 再把 SQL 設定安全性, 只允許網站部分連線, 了解架構後再考慮如何更安全.
4
dragonH
iT邦研究生 3 級 ‧ 2019-07-11 16:28:57

應該是

Android App → 後端伺服器 → 資料庫
            ←           ←

後端伺服器不只可以用 php 寫

也可以用 nodejs java python 等...

給你個 nodejs 範例

反正廣義來說

就是 app 發送 http request 到 後端伺服器

後端伺服器將資料處理完並回傳給 app

你在透過回傳的資料 在 app 上進行相關的動作

4
小魚
iT邦高手 1 級 ‧ 2019-07-11 16:53:07

其實網路安全有點複雜,
不過一般來說如果能夠直接存取DB,
危險性會高一些些,
尤其是允許 %.%.%.% 的,

有一種做法就是在Server架本機資料庫,
然後本機的網頁(PHP等)去讀資料庫的資料,
透過網頁(一般稱為API)去要資料,
APP傳給API一些參數,
然後網頁透過這些參數去跟資料庫讀資料或寫資料,
然後再將結果回傳給APP(通常是用Json字串),
當然也可以加一些驗證之類的,
不過既然是初學也不用太複雜,
驗證這件事就先忘記吧.

另外通常會使用POST方法比GET方法安全一些.
(只是比較安全、沒說一定安全)

3
浩瀚星空
iT邦大師 1 級 ‧ 2019-07-12 09:27:49

大約說一下為何你老師會這樣說。
因為如果你要直接從app連接到資料庫上,你一定得要將資料庫的帳密給寫到app裏面。
app並不是你所控管的,使用老可以分解、解析後得到你的資料庫帳密。就可以登入了。
再加上為了要讓外部也可以連結的情況下,你的資料庫一定得要開放對外連接的權限。
大大的增加其危險性。
這樣子是否可以了解你老師說的東西呢??

再來,其實一般來說我們會把他叫做api。
你的app是連接你的主機內的任何一支能應用的程式,如c、php、java.....等後端應用程式處理。
傳入的值可以是get、post或是xml及data封包...。這看你的東西條件來決定。
先不論你決定要怎麼做。但因為透過了api處理。你的資料庫帳密就可以寫在你的api內。
而這支應用並無法讓使用者直接獲得其應用,自然就不容易取得內部寫的資料庫帳密。
且因為api應用是放在跟資料庫同一台機器,也無需開放對外連結。大大的降低其危險性。

基本來說,我會建議你先學會post傳送後,接收json值。會比較單純點。
你用XAMPP的話,那就採用php來當你的後端核心。
簡單一點的程式如下


<?php
$dbms='mysql';     //資料庫模式,這邊就使用mysql吧
$host='localhost'; //資料庫主機名
$dbName='test';    //資料庫名
$user='root';      //資料庫帳號
$passWord='';          //資料庫密碼
$dsn="$dbms:host=$host;dbname=$dbName";

$post = $_POST;
try {
    $dbh = new PDO($dsn, $user, $passWord);    
    $data = Array();
    
    //要運行的sql的指令
    $sql = "SELECT * from db where id={$post['id']}";
    foreach ($dbh->query($sql) as $row) {
        $data[] = $row;        
    }
    /** 也可以改用如下的用法直接取得全部數據,如果資料量不大的話
    $rs = $dbh->query($sql);
    $data = $rs->fetchAll();     
    */
    
    $dbh = null;
} catch (PDOException $e) {
    die ("Error!: " . $e->getMessage() . "<br/>");
}
echo json_encode($data);  //輸出json格式資料
?>

這樣的程式碼就可以做為你的基本應用了。

我要發表回答

立即登入回答