kintone安全編碼指南
本頁面使用機器翻譯而成。
機器翻譯免責聲明
概要
雖然使用 API 可以提高便利性,但也存在以下風險:
- 存在安全問題。
- cybozu.com 服務無法正常工作。
本文將對使用kintone API的程序進行說明。
防止跨網站腳本和 CSS 注入
「跨站腳本 」(XSS) 是一種漏洞,攻擊者將惡意腳本代碼注入網站,導致訪問者的網路瀏覽器執行腳本。
與 XSS 一樣,CSS 可以允許將惡意 CSS 代碼注入網頁中執行。
使這種攻擊成為可能的漏洞稱為「CSS 注入」。
可能的威脅
使用 XSS 或 CSS 注入載入代碼可能會導致:
- kintone數據被盜。
- 顯示假畫面。
- 惡意 Cookie 儲存在您的網路瀏覽器中。
易受攻擊的代碼示例
|
|
此代碼根據 text1 的值生成一個文字框。
如果在 text1 文字框中鍵入以下內容,則將執行代碼實現者不需要的代碼。
|
|
對策
對所有輸出元素執行逸出
在外部傳遞給程式的字串中,應逸出
具有特殊含義(<
>
"
例如 )的字元。
正確逸出HTML 元素需要大量知識。
盡可能避免使用 document.write
和 innerHTML
動態生成 HTML。
通過使用 innerHTML
而不是 innerText
,可以防止一般的 XSS。
輸出 URL 應僅以「http://」或「https://」開頭
如果基於外部輸入(例如 a 標記的 href 屬性或 img 標記的 src 屬性)動態生成 URL,javascript:
系統可能會提示您輸入以 開頭的字串並嵌入腳本。
為防止這種情況,請僅輸出以「http://」或「https://」開頭的 URL。
避免生成具有外部輸入值的元素
假設 untrusted
配置了外部輸入值。
|
|
不要從不受信任的外部網站載入 JavaScript 或 CSS
目標腳本可能會變更,並且有一天可能會突然啟動程式來竊取數據。
如果引入外部腳本,請確保該網站是可信的。
使用 HTTPS 進行通信
cybozu.com 使用 HTTPS 來加密網路瀏覽器的通訊。
即使與外部系統連結,也要使用支援 HTTPS 的 API。
適當地處理身份驗證和授權資訊
如果要與外部服務集成,則需要在某處存儲有關外部服務的身份驗證和授權的資訊。
考慮到這種資訊洩露的影響,請採取慎重考慮認證資訊的存儲位置和限制憑據洩露範圍等措施。
特別是,JavaScript 自定義傾向於將身份驗證/授權資訊存儲在普通使用者可以查看的位置。
身份驗證/授權資訊範例
- 密碼
- API 金鑰
- OAuth 用戶端金鑰和存取權杖
身份驗證/授權資訊的存儲位置
在這裡,我們將通過對它們進行如下分類來介紹它們。
- 我們建議僅由管理員(具有特定許可權的人員)查看目標。
- 不建議將其保存到一般使用者可以查看的位置。
這些僅供參考。
同樣,考慮到洩漏的後果,請仔細考慮將其存放在哪裡。
推薦目的地
*1 通過插入kintone自定義功能,使用代理功能,可以將認證/授權資訊的披露範圍限製為具有應用管理員或更高許可權的使用者。
詳情請參閱以下頁面。
使用kintone外掛程式隱藏機密資訊的方法:介紹如何隱藏
^
*2
通過使用Garoon代理API,可以將認證/授權資訊的披露範圍限制為具有管理員或更高許可權的使用者。
有關詳細內容,請參閱Garoon説明中的Proxy API設置。
*3 阻止HttpOnly的Cookie 來自 JavaScript 的訪問。 ^
不推薦的目的地
- 前端程式(如kintone JavaScript自訂、Garoon JavaScript自訂)
- Web Storage(localStorage 、sessionStorage)
- 非 HttpOnly 的 Cookie
- 配置kintone外掛程式
kintone.plugin.app.setConfig()
- 配置Garoon外掛程式
garoon.plugin.setConfig()
Web 儲存通常用於存儲資訊,可以從任何 JavaScript 訪問。
同樣,kintone外掛程式設置和非 HttpOnly 的 Cookie 也可以從 JavaScript 訪問。
因此,如果您訪問惡意網站,您的身份驗證/授權資訊可能會被濫用。
引用
正確存儲獲取到的數據
從 cybozu.com 獲得的數據包含個人和機密資訊。
如果將此資訊存儲在外部應用程式中,請仔細設計和操作系統,以防止數據洩露或丟失。
使用使用者ID標識使用者
如果要唯一標識使用者,建議使用系統頒發的使用者ID。
登錄名是可由cybozu.com共通管理員變更的專案。
如果稍後將使用者的登錄名變更為其他用戶的登錄名,則通過其登錄名來標識這些使用者可能會指非預期使用者。
使用者 ID 可以透過以下 API 獲取:
- kintone JavaScript API
獲取登入使用者資訊
在回應的id
是使用者ID。 - Garoon JavaScript API
獲取登入使用者資訊
在回應的id
是使用者ID。 - User API
獲取使用者
在回應的ids
是使用者ID。
使用 JavaScript 自訂時需要注意的其他要點
跨網域限制
由於跨網域限制,無法使用 XHR (XMLHttpRequest) 在 cybozu.com 和外部網站之間進行通信。無法授予「Access-Control-Allow-Origin」標頭。
在 JavaScript 中獲取 Cookie
由於 cybozu.com Cookie 具有 HttpOnly 屬性,因此 JavaScript 無法獲取 cybozu.com Cookie。
重定向到外部網站
如果要根據外部輸入值動態生成要傳遞給物件的URL,如下所示,請實現它以確保生成預期的URL。
- location.href
- document.location
- window.open
使用嚴格模式
您可以使用 JavaScript 的嚴格模式來防止編碼錯誤並使您的代碼更安全。
有關嚴格模式的詳細資訊,請參閱以下頁面。
MDN:嚴格模式
嚴格模式的主要特點
- 您只能將值分配給您聲明的變數。
- 在 eval 函數中定義的變數範圍僅限於該函數。
- 不支援arguments.callee。
|
|