
- 如果真能駭入後端試算表伺服器,那 Google 會比我更擔心,這可是世界級的駭客實力
- 這個會員系統主要功用為,讓會員有權限看到我寫的一些工具程式碼,就算被破解導致內容被看到,我也沒什麼實質上的損失,本站的程式碼本來就是個人筆記用途
一、injection 注入攻擊
以 Google 試算表做為資料庫的情況,高端駭客手法就交給 Google 伺服器應對,我們要自行負責不被程式碼注入攻擊,無論是前端網頁或是後端 GAS。 這篇「身為 Web 工程師,你一定要知道的幾個 Web 資訊安全議題」,介紹了幾個常見的網頁攻擊手法,請參照該篇的範例,以下說明跟本文相關的部分: 1. Stored XSS XSS 是 Cross-site scripting(跨站指令碼攻擊) 的縮寫。 Stored XSS 是儲存型 XSS,利用網頁上的輸入欄位,輸入二、防止 injection 攻擊
1. 哪些特些字元需要預防從前面的常見攻擊手法來看,針對 Google 試算表資料庫而言,一般 JS 前後端要防止程式碼注入攻擊,只要針對以下這 4 個特殊符號進行處理,駭客就沒搞頭了:"'< >
2. 其他特殊字元這篇「SQL Injection 的多種攻擊方式與防護討論」滿不錯的,提供了許多特殊字元建議站長針對資料庫安全逐一測試,不過這畢竟是 SQL 的環境。 至於 JS 環境,我想若是有某些程式碼使用了 eval(),那麼被偷偷塞入函數時是有可能被執行的,所以檢測過上面這篇提出的特殊字元,我建議也對以下這些符號進行處理,多做總比少做好: = () {} ? + |
3. HTML Entity 編碼這篇「HTML Entity 簡介」說明了對特殊字元進行 HTML Entity 編碼後,可在網頁上正常顯示符號。 舉例來說,左箭頭符號 三、範例程式碼
瞭解本文所有概念後,對於 Google 試算表資料庫防止 code injection,我們需要做的就是將前端使用者輸入的字串內容,以及後端接收的所有字串內容,針對某些特殊字元進行編碼,轉成 HTML Entity。 這個討論串「Encode HTML entities in JavaScript」提供了 JS 範例,以下為我整理過的程式碼:var reg = /["'<>=(){}?+|]/g, // 所有要轉換的特殊字元 inputStr = "這裡是使用者輸入的字串'<script>(function(){alert(\"你被駭了\")})()<\/script>", // 原始字串 newStr = htmlEntity(inputStr); // 轉譯字串 alert(newStr); // 彈跳視窗可看到轉譯字串 document.write(newStr); // 在網頁上呈現的轉譯字串 function htmlEntity(str) { return str.replace(reg, function(i) { return "&#" + i.charCodeAt(0) + ";"; }); }
轉譯後的字元可以安心存入後端資料庫,不會有任何危險。而前端顯示的轉譯字串,又能跟當初輸入時一模一樣,使用者不會察覺任何異狀。 更多 Google Apps Script 相關技巧: