2011年8月1日 星期一

怎麼防止不透過swf.直接傳值給php?

最近幾個幾個案子的狀況讓我思考這個問題~
在google上找到了一個詳細的知識分享.
資料來源:http://www.ptt.cc/bbs/Flash/M.1216140526.A.D4E.html
延伸閱讀:我不是教你詐:七個商業邏輯錯誤案件研究

內容如下:


: 了解到flash不能和伺服器的資料庫連結,只能透過asp或php之類的才能存入資料
: 所以小弟也就開始學習php..但是最近想到了一個問題..
: 假如我寫了一個swf,傳值給php,php再存入資料庫

事實上,你用 swf 呼叫 php,不用反組譯 swf 就可以知道你的 php 接收了甚麼參數。
swf 呼叫 php 的方式其實就和你的瀏覽器打上 php 的網址是一樣的。
(就算是用Post的,其實我也可以看到你Post了甚麼,然後用程式去模擬Post動作...)

: 那如果有心人士反組譯了我的swf,知道該傳什麼給php
: 那就有可能被以作弊的方式,達到他想要的目的(而不是照著我的規則走)

這裡有一個重點,作弊的方式,是甚麼方式?
又你想要保護的資料是甚麼?保護的對象是誰?是使用者還是Server?
而不單單是要怎麼保護 "我傳給php的值"...

提供一些解法:

1. 我要保護我 php?param= 後面的參數:
最直覺的,在Flash中用一組動態的Key加密後傳給php,再由php解密。
只是我覺得反正你那些值到後來也是要顯示在Flash裡面...何必那麼麻煩...
這只能防防小人,真正要防Hacker還是防不了...
(不過我想Hacker應該也沒啥興趣駭這種無聊的東西)

用 AS3 + Encryption 搜尋應該有一些東西參考,我個人是沒作過用AS3加密...


2. 我要保護我的Server不會被人用機器人攻擊。(例如討論版被瘋狂灌水)
例用 CAPTCHA (認證圖),由Server產生一張圖給Flash,
然後要使用者輸入圖上顯示的數字,確認是"人眼"看到圖才能繼續貼文的動作。

搜尋 php + CAPTCHA 應該有一些免費的解決方案可以用。


3. 我要防止User跳過某些步驟。
利用 Session 將資料寫在 Server 端。和寫網頁一樣,翻翻Php的Session那章吧~XD


4. 我要保護我的資料庫不會被 SQL Injection。
只要記住一點,所有User傳入Server的參數都一定要用Server端的程式(即Php)檢查!
例如,我輸入了電話,裡面不應該出現中文,或是長度太長(電話不可能大於20碼)。
資料存進資料庫之前要用 mysql_real_escape_string 跳脫字元一下...

這也和寫網頁程式的觀念一樣。搜尋 SQL Injection 有一大堆討論。


5. 我要保護資料傳遞過程不被竊聽。
使用 SSL (即https) 進行網頁的動作,但要注意的是,用SSL是防止在"傳輸過程"
不被第三者(即Server和用戶兩者"以外")竊聽,而不是資料到了Server和用戶的"面"
前還加密的(加密解不開是要怎麼看)。Flash可以接收https傳進去資料。