中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Web安全開發建議

發布時間:2020-08-06 18:41:10 來源:網絡 閱讀:1286 作者:安大叔 欄目:web開發
Web安全問題,很多時候會被人所忽略,安全漏洞造成了很多不必要的維護和開發任務,產生的問題有時候更是致命的。
實際上,只要我們養成一些習慣,知道一些安全問題的基本原理,可以很大程度避免問題的出現,這也是一個優秀Web程序員的必備素質。

UI變量轉義規范

什么是UI變量?凡是出現在HTML中由后端輸出(或由JSON渲染)的變量都可稱之為UI變量,它可以是PHP變量、Smarty變量、JSP變量或前端模版變量等等。

有些模版自帶了轉義功能,比如Smarty可以對HTML或JavaScript轉義:

Data: <h2>"Ricky"</h2>
Template: <{$name|escape:html|escape:javascript}>
Output: &lt;h2&gt;&quot;Ricky&quot;&lt;\/h2&gt;

Mustache默認自動對HTML轉義(雙花括號是wiki的語法,所以本文Mustache模版標簽用{<>}表示):

Data: <h2>Ricky</h2>
Template: {<name>}
Output: &lt;h2&gt;Ricky&lt;\/h2&gt;

如果不想轉義,可以使用3個花括號:{`name`}

注意:當沒有使用具有轉義功能的模版時,一定要在程序中對UI變量進行轉義。對后端傳來的數據,都采取不信任的策略。

根據UI變量出現的位置不同,轉義規則也不同,常見的有以下幾種情況:

UI變量出現在HTML標簽中或標簽的屬性中

實例:

<div>{<content>}</div>
<input type='checkbox' value='{<value1>}' />
<input type="text" value="{<value2>}" />

轉義規則:

字符轉義漏洞實例
< &lt;{<content>} = <h2>I am bigger</h2>
> &gt;
'&#39{<value1>} = '/><script>alert(0)</script>…
"&quot;{<value2>} = "/><script>alert(0)</script>…
&&amp;
(可選)
如果不轉義,則用戶可以輸入不可見字符,如:&nbsp;
如果轉義,則用戶輸入的某些字符不能正確顯示,如:&copy;


UI變量出現在<script>標簽中

實例:

<script>
    var email = '{<email>}';
    var name = "{<name>}";
    /*{<sex>} will not use */
</script>

轉義規則:

字符轉義漏洞實例
'\'{<email>} = ';alert(0);…
"\"{<name>} = ";alert(0);…
\\\{<name>} = \
報錯:unterminated string literal
/\/{<name>} = ";</script><script>alert(0);…
{<sex>} = */alert(0);…
\n\n{<email>} = a@a.com
b@b.com
報錯:unterminated string literal
\r\r

注意:注釋也會存在漏洞,代碼上線前要進行壓縮,去掉注釋。


UI變量出現在JS環境的innerHTML插入字符串中

實例:

<script>
    $("#tip").innerHTML = "您好!" + "{<username>}";
</script>

轉義規則:

字符轉義漏洞實例
先進行HTML轉義,再進行JavaScript轉義
< &lt;{<username>} =
";</script><script>document.body.innerHTML = "<h2>Ricky</h2>
> &gt;
'\'
"\"
\\\
/\/
\n\n
\r\r


UI變量出現在HTML頁面onclick等事件函數的參數中

實例:

<input type="button"  value="提交" />

轉義規則:

字符轉義漏洞實例
先進行JavaScript轉義,再進行HTML轉義
'\&#39;{<data>} = ')"/><input name="
"\&quot;
\\\
/\/(可選)
\n\n
\r\r
< &lt;
> &gt;

注意:實際開發中,應使用事件綁定,避免這種寫法。


UI變量出現在URL中

實例:

<a >進入旭日</a>

轉義規則:

字符轉義漏洞實例
非字母、數字字符encodeURIComponent{<path>} = "></a>…


其他注意事項

從cookie/url中獲取數據

實例:

<script>
   var url = location.href;
   //var cookie = document.cookie;
   $("#Show").html(encodeHTML(url));
</script>

說明:從cookie或頁面的url中獲取的數據都是不可信任的,可能包含惡意代碼。

避免document.write + location.href的寫法

實例:

<script>
   document.write('<input type="hidden" name="url" value="' + location.href + '" />');
</script>

正確寫法:

<input type="hidden" name="url" value="" />
<script>
   document.getElementsByName("url").value = location.href;
</script>

說明:直接向頁面輸出帶有url的HTML,可能會執行含惡意代碼。

謹慎使用document.domain解決跨域問題

說明:當域為a.sogou.com的A頁面內嵌域為b.sogou.com的B頁面時,可以通過設置domain為sogou.com使兩個頁面進行通信。但這樣的設置使安全隱患得以擴大化,如果B頁面存在XSS漏洞,那么就可以通過B頁面操控正常的A頁面。

Json數據conentType的設置

說明:Json數據的Response要設置contentType為“text/javascript”,避免未設置或者設置成“text/html”。否則容易注入JavaScript腳本,并當著普通頁面來運行。

Flash跨域crossdomain.xml配置

做跨域通信通常會用到Flash,這需要在server部署一個crossdomain.xml文件,通常為:

<?xml version="1.0"?>
<cross-domain-policy>
    <allow-access-from domain="*" />
</cross-domain-policy>

這表示允許任何域的Flash對本server進行訪問,如果Flash是用戶上傳的,就可能包含惡意代碼。

解決辦法:只允許搜狗域的Flash訪問

<?xml version="1.0"?>
<cross-domain-policy>
    <allow-access-from domain="*.sogou.com" />
</cross-domain-policy>

在頁面中插入Flash的安全設置

如果展現來自用戶上傳的Flash,需要設置一下2個參數:

  • allowScriptAccess: "never" //絕對禁止Flash與頁面元素及腳本的通訊

  • allowNetworking: "none" //禁止任何的網絡通訊

不要隨意嵌套第三方頁面

不要使用iframe或者其他形式隨意嵌套第三方頁面,第三方頁面會包含不可控的因素,譬如含有***瀏覽者的惡意代碼。如果第三方頁面存在漏洞,***者可以通過***第三方來實現***父頁面。

防范CSRF(跨站點請求偽造)***

  • 盡量使用POST提交

  • 添加refer的檢查

  • form表單提交添加圖形驗證碼

  • 添加token驗證


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

葵青区| 荥经县| 盘山县| 永春县| 海南省| 清新县| 乌苏市| 南溪县| 方城县| 南京市| 高邑县| 临海市| 且末县| 玛沁县| 明水县| 山阳县| 富裕县| 东平县| 杂多县| 双城市| 遂川县| 新郑市| 垦利县| 凤翔县| 南郑县| 大新县| 县级市| 西乌| 巫溪县| 秦安县| 禄劝| 八宿县| 兴义市| 建始县| 遂川县| 库伦旗| 荔波县| 老河口市| 鸡东县| 临城县| 苍梧县|