Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 91视频免费观看高清观看完整,日韩国产有码在线观看视频,麻豆va一区二区三区久久浪

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Google Chrome 77引入新的網站隔離安全特性

          著 Chrome 77 的發布,谷歌也為 Android 和桌面版本引入了全新的站點隔離安全特性。此前,當熔毀(Meltdown)和幽靈(Spectre)漏洞被披露的時候,谷歌就快速推出了這項安全特性,以便 Chrome 67 用戶啟用。開啟之后,Chrome 瀏覽器將把用戶訪問的每個網站,都加載到單獨的沙盒進程中,以限制其對資源和功能的訪問。

          (題圖 via Bleeping Computer)

          通過這種方式,能夠有效地防止惡意網站利用推測執行攻擊漏洞,來訪問加載在其它瀏覽器選項卡中的數據。

          然而啟用站點隔離的代價,就是耗費更多的進程和內存資源,導致某些網站的內存用量爆炸。但在安全性和資源利用率之間,總要作出一定的權衡。

          隨著 Android 版 CChrome 77 的發布,谷歌決定進一步增強對移動用戶的防護,所以引入了與桌面版本略有不同的網站隔離措施。

          據悉,Android 版“網站隔離”特性,僅會保護用戶通過密碼登陸的站點,以減少移動設備的資源占用率,畢竟其處理器和內存性能都低于臺式機計算機。

          谷歌表示,目前已有 99% 運行 Android 且內存超過 2GB 的用戶啟用了此功能,且有 1% 用戶保留了監測功能以提升性能。在未來,谷歌還考慮向更多設備提供支持。

          對于想要提供完整站點隔離保護功能的用戶,可在地址欄輸入 chrome:// flags/#enable-site-per-process 并跳轉,然后啟用這個標記。

          至于臺式機用戶,目前 Chrome 77 的“站點隔離”功能亦可保護用戶免受渲染器進程的影響。這些進程負責各個標簽頁中發生的事情,例如將 HTML、CSS 和 JavaScript 代碼轉義為網頁并顯示。

          一些攻擊者試圖對其它標簽頁中的網頁代碼展開攻擊,但新加入的隔離措施,可有效防止此類惡意活動的發生。

          者:HelloGitHub-追夢人物

          文中涉及的示例代碼,已同步更新到HelloGitHub-Team 倉庫[1]

          上一篇中我們使用了 Markdown 來為文章提供排版支持。Markdown 在解析內容的同時還可以自動提取整個內容的目錄結構,現在我們來使用 Markdown 為文章自動生成目錄。

          在文中插入目錄

          先來回顧一下博客的 Post(文章)模型,其中 body 是我們存儲 Markdown 文本的字段:

          blog/models.py
          
          
          from django.db import models
          
          
          class Post(models.Model):
          	# Other fields ...
          	body = models.TextField()
          

          再來回顧一下文章詳情頁的視圖,我們在 detail 視圖函數中將 postbody 字段中的 Markdown 文本解析成了 HTML 文本,然后傳遞給模板顯示。

          blog/views.py
          
          def detail(request, pk):
          	post = get_object_or_404(Post, pk=pk)
          	post.body = markdown.markdown(post.body,
           				extensions=[
           					'markdown.extensions.extra',
           		 			'markdown.extensions.codehilite',
           					'markdown.extensions.toc',
           				])
          	return render(request, 'blog/detail.html', context={'post': post})
          

          markdown.markdown() 方法把 post.body 中的 Markdown 文本解析成了 HTML 文本。同時我們還給該方法提供了一個 extensions 的額外參數。其中 markdown.extensions.toc 就是自動生成目錄的拓展(這里可以看出我們有先見之明,如果你之前沒有添加的話記得現在添加進去)。

          在渲染 Markdown 文本時加入了 toc 拓展后,就可以在文中插入目錄了。方法是在書寫 Markdown 文本時,在你想生成目錄的地方插入 [TOC] 標記即可。例如新寫一篇 Markdown 博文,其 Markdown 文本內容如下:

          [TOC]
          
          ## 我是標題一
          
          這是標題一下的正文
          
          ## 我是標題二
          
          這是標題二下的正文
          
          ### 我是標題二下的子標題
          這是標題二下的子標題的正文
          
          ## 我是標題三
          這是標題三下的正文
          

          其最終解析后的效果就是:

          原本 [TOC] 標記的地方被內容的目錄替換了。

          在頁面的任何地方插入目錄

          上述方式的一個局限性就是只能通過 [TOC] 標記在文章內容中插入目錄。如果我想在頁面的其它地方,比如側邊欄插入一個目錄該怎么做呢?方法其實也很簡單,只需要稍微改動一下解析 Markdown 文本內容的方式即可,具體代碼就像這樣:

          blog/views.py
          
          def detail(request, pk):
          	post = get_object_or_404(Post, pk=pk)
          	md = markdown.Markdown(extensions=[
          		 'markdown.extensions.extra',
          		 'markdown.extensions.codehilite',
          		 'markdown.extensions.toc',
          	])
          	post.body = md.convert(post.body)
          	post.toc = md.toc
          
          	return render(request, 'blog/detail.html', context={'post': post})
          

          和之前的代碼不同,我們沒有直接用 markdown.markdown() 方法來渲染 post.body 中的內容,而是先實例化了一個 markdown.Markdown 對象 md,和 markdown.markdown() 方法一樣,也傳入了 extensions 參數。接著我們便使用該實例的 convert 方法將 post.body 中的 Markdown 文本解析成 HTML 文本。而一旦調用該方法后,實例 md 就會多出一個 toc 屬性,這個屬性的值就是內容的目錄,我們把 md.toc 的值賦給 post.toc 屬性(要注意這個 post 實例本身是沒有 toc 屬性的,我們給它動態添加了 toc 屬性,這就是 Python 動態語言的好處)。

          接下來就在博客文章詳情頁的文章目錄側邊欄渲染文章的目錄吧!刪掉占位用的目錄內容,替換成如下代碼:

          {% block toc %}
          	<div class="widget widget-content">
          		<h3 class="widget-title">文章目錄</h3>
           	{{ post.toc|safe }}
           	</div>
          {% endblock toc %}
          

          即使用模板變量標簽 {{ post.toc }} 顯示模板變量的值,注意 post.toc 實際是一段 HTML 代碼,我們知道 django 會對模板中的 HTML 代碼進行轉義,所以要使用 safe 標簽防止 django 對其轉義。其最終渲染后的效果就是:

          處理空目錄

          現在目錄已經可以完美生成了,不過還有一個異常情況,當文章沒有任何標題元素時,Markdown 就提取不出目錄結構,post.toc 就是一個空的 div 標簽,如下:

          <div class="toc">
           	<ul></ul>
          </div>
          

          對于這種沒有目錄結構的文章,在側邊欄顯示一個目錄是沒有意義的,所以我們希望只有在文章存在目錄結構時,才顯示側邊欄的目錄。那么應該怎么做呢?

          分析 toc 的內容,如果有目錄結構,ul 標簽中就有值,否則就沒有值。我們可以使用正則表達式來測試 ul 標簽中是否包裹有元素來確定是否存在目錄。

          def detail(request, pk):
           	post = get_object_or_404(Post, pk=pk)
           	md = markdown.Markdown(extensions=[
           	'markdown.extensions.extra',
           	 	'markdown.extensions.codehilite',
           	'markdown.extensions.toc',
           	])
           	post.body = md.convert(post.body)
           
           	m = re.search(r'<div class="toc">\s*<ul>(.*)</ul>\s*</div>', md.toc, re.S)
           	post.toc = m.group(1) if m is not None else ''
           
           	return render(request, 'blog/detail.html', context={'post': post})
          

          這里我們正則表達式去匹配生成的目錄中包裹在 ul 標簽中的內容,如果不為空,說明目錄,就把 ul 標簽中的值提取出來(目的是只要包含目錄內容的最核心部分,多余的 HTML 標簽結構丟掉)賦值給 post.toc;否則,將 post 的 toc 置為空字符串,然后我們就可以在模板中通過判斷 post.toc 是否為空,來決定是否顯示側欄目錄:

          {% block toc %}
           	{% if post.toc %}
           	 <div class="widget widget-content">
           		<h3 class="widget-title">文章目錄</h3>
           		<div class="toc">
           		<ul>
           			{{ post.toc|safe }}
           		</ul>
           		</div>
           	 </div>
           	{% endif %}
          {% endblock toc %}
          

          這里我們看到了一個新的模板標簽 {% if %},這個標簽用來做條件判斷,和 Python 中的 if 條件判斷是類似的。

          美化標題的錨點 URL

          文章內容的標題被設置了錨點,點擊目錄中的某個標題,頁面就會跳到該文章內容中標題所在的位置,這時候瀏覽器的 URL 顯示的值可能不太美觀,比如像下面的樣子:

          http://127.0.0.1:8000/posts/8/#_1
          
          http://127.0.0.1:8000/posts/8/#_3
          

          #_1 就是錨點,Markdown 在設置錨點時利用的是標題的值,由于通常我們的標題都是中文,Markdown 沒法處理,所以它就忽略的標題的值,而是簡單地在后面加了個 \_1 這樣的錨點值。為了解決這一個問題,需要修改一下傳給 extentions 的參數,其具體做法如下:

          blog/views.py
          
          from django.utils.text import slugify
          from markdown.extensions.toc import TocExtension
          
          def detail(request, pk):
           	post = get_object_or_404(Post, pk=pk)
           	md = markdown.Markdown(extensions=[
           	 'markdown.extensions.extra',
           	 'markdown.extensions.codehilite',
           	 # 記得在頂部引入 TocExtension 和 slugify
           	 TocExtension(slugify=slugify),
           	])
           	post.body = md.convert(post.body)
           
           	m = re.search(r'<div class="toc">\s*<ul>(.*)</ul>\s*</div>', md.toc, re.S)
           	post.toc = m.group(1) if m is not None else ''
           
           	return render(request, 'blog/detail.html', context={'post': post})
          

          和之前不同的是,extensions 中的 toc 拓展不再是字符串 markdown.extensions.toc ,而是 TocExtension 的實例。TocExtension 在實例化時其 slugify 參數可以接受一個函數,這個函數將被用于處理標題的錨點值。Markdown 內置的處理方法不能處理中文標題,所以我們使用了 django.utils.text 中的 slugify 方法,該方法可以很好地處理中文。

          這時候標題的錨點 URL 變得好看多了。

          http://127.0.0.1:8000/posts/8/#我是標題一
          
          http://127.0.0.1:8000/posts/8/#我是標題二下的子標題
          

          References

          [1] HelloGitHub-Team 倉庫: https://github.com/HelloGitHub-Team/HelloDjango-blog-tutorial

          歡迎關注 HelloGitHub 公眾號,獲取更多開源項目的資料和內容

          『講解開源項目系列』啟動——讓對開源項目感興趣的人不再畏懼、讓開源項目的發起者不再孤單。跟著我們的文章,你會發現編程的樂趣、使用和發現參與開源項目如此簡單。歡迎聯系我們給我們投稿,讓更多人愛上開源、貢獻開源~

          . 安全

          1.1. 關乎人類心理學

          1.1.1. 接受開發者有著人類的弱點,主要的弱點就是對概率的錯誤估計

          1.2. 安全從來不只跟軟件和信息有關,也跟人和環境有關

          1.2.1. 有不計其數的公司讓它們的數據庫在互聯網上沒有密碼就可以被訪問

          1.3. 安全漏洞本身總是被叫作事故(incident),絕不是不負責任的

          1.4. 安全,就像測試一樣,是你的服務、數據和業務的可靠性的一個子集

          1.5. 應當將與安全有關的決定看作可靠性技術債,它能幫你優化整個人生

          1.6. 安全問題的不可避免也強調了事無絕對,沒有絕對安全的系統

          1.7. 完美的安全是不可能實現的,你總會遇到用戶體驗和安全之間的權衡

          2. 復盤報告

          2.1. postmortem blog post

          2.2. 通常是在一次非常讓人尷尬的安全事件發生之后寫的,目的是清晰地、極盡細節地向管理層描述事件始末

          2.2.1. 實際上是為了掩蓋他們搞砸了的事實

          3. 負責任的披露

          3.1. responsible disclosure

          3.2. 指的是那些沒有在快速識別問題方面投入較多資源的公司,在利用充足的時間來修復問題后,再向公眾公布修復安全漏洞的做法

          3.3. 負責任的披露從一開始就應該被稱為限時披露

          4. 黑客之外

          4.1. 安全可能還與那些你認為不相關的因素有關

          4.2. “不要在星期五進行部署”

          4.2.1. 這句話的邏輯很簡單,即如果你把事情搞砸了,周末不會有人來處理,所以你應該在一周的第一天來進行一些高危操作

          4.2.2. 周末存在的本身不是一個安全漏洞,但它仍然可能導致災難性的結果

          4.3. Facebook給開發者提供了一個API,讓他們可以瀏覽用戶的好友列表

          4.3.1. 2016年,一個公司通過這些信息生成用戶的政治傾向圖,然后通過精準投放廣告影響大選

          4.3.2. 這個功能是完全按照需求來設計的,沒有錯誤,沒有安全漏洞,沒有后門,也沒有黑客介入

          4.3.3. 某些人創造了這個功能,另一些人使用它,但是獲得的數據卻能違背他人意愿而操控他們,并因此導致傷害

          5. 威脅模型

          5.1. 對腦海里或者紙面上的威脅模型確定需要設置的安全措施的優先次序,并找出其中的漏洞

          5.2. 最常見的威脅模型之一可能是用“反正我也沒什么值得看的東西!”的想法來應對黑客攻擊、平臺管控,或者心懷惡意的前合作伙伴

          5.3. 我們并不真正關心數據是否被泄露和濫用,這種情況產生的原因主要是我們缺乏想象力來思考數據的用途

          5.4. 隱私就像安全帶:你在大多數時間里不需要它,但當你需要它的時候,它可以救你的命

          5.5. 實際的威脅建模涉及分析行為者(analyzing actor)、數據流(data flow)和信任邊界(trust boundary)

          5.6. 袖珍威脅模型

          5.6.1. 你的應用程序的資產

          5.6.1.1. 任何你不想丟失或泄露的東西都是資產,包括你的源代碼、設計文檔、數據庫、私鑰、API令牌、服務器配置,還有Netflix觀看清單

          5.6.2. 資產所處的服務器

          5.6.2.1. 每臺服務器都會被一些人訪問,而每臺服務器都會訪問其他一些服務器

          5.6.3. 信息敏感性

          5.6.4. 訪問資源的路徑

          5.7. 你服務器上的所有第三方組件都經過了數百萬次的測試、錯誤修復和安全審計

          6. 編寫安全的網絡應用程序

          6.1. 在設計時考慮到安全問題

          6.1.1. 安全是很難后續改造的,主要是因為所有的設計導致你一開始就寫了不安全的代碼

          6.1.1.1. 設計時首先要考慮到安全問題,因為在既有基礎上去改造安全措施是很難的

          6.1.2. 審查你紙面的或腦海里的威脅模型

          6.1.2.1. 了解風險,以及現在使之安全的成本和以后使之安全的成本

          6.1.3. 決定你將把應用程序的秘密(數據庫密碼、API密鑰)存儲在哪里

          6.1.3.1. 讓它成為一個鐵打不動的原則

          6.1.4. 設計最少的權限

          6.1.4.1. 代碼不應該得到除它必須用到的之外的權限

          6.1.4.2. 如果只有少數任務需要更高的權限,可以考慮將它們分解成單獨的、隔離的實體

          6.1.4.3. 盡可能在最低權限的賬戶下運行網頁應用程序

          6.1.5. 將安全原則應用于你的整個組織

          6.1.5.1. 員工不應該訪問他們執行日常任務時不需要的資源

          6.1.5.2. CEO根本就不該有訪問數據庫或服務器的權限

          6.1.5.3. 沒有人可以被信任,而是因為他們的訪問權可能會被外部人員惡意取得

          6.2. 隱蔽性安全的用處

          6.2.1. 軟件安全是一場與時間的競賽

          6.2.1.1. 所有安全措施的唯一目的是為你贏得時間,讓攻擊者做無用功

          6.2.2. 信息安全專家厭惡隱蔽性安全

          6.2.2.1. 它不能為你贏得時間,或者也許它可以,但只是杯水車薪

          6.2.3. 隱蔽性并不會給你帶來真正的安全,但它偶爾會給你爭取補救時間,直到你把問題解決掉

          6.2.4. 邊際安全并不是真正的安全

          6.2.5. 當你在安全這件事上努力的程度是大是小都沒什么區別而且風險很大時,更推薦你采用真正的安全而不是隱蔽性安全

          6.2.6. 隱蔽性安全并不是真正的安全,但它可能是真正的損害。你得權衡利弊

          6.3. 不要光靠你自己去實現安全

          6.3.1. 你不應該編寫一種僅屬于自己的安全機制,無論它是哈希、加密還是節流

          6.3.2. 一個普通的開發者在實現自己軟件的安全時可能會錯過關鍵的細節,基本上造成的結果就是毫不安全(zero security)

          6.4. SQL注入攻擊

          6.4.1. 解決SQL注入問題的最安全方法是使用參數化查詢(parameterized query)

          6.4.1.1. 參數化查詢并不是靈丹妙藥

          6.4.1.2. 有些數據庫的抽象似乎不支持常見的參數化查詢,這些數據庫的抽象有其他的方法來進行參數化查詢

          6.4.1.3. 不要力求全部查詢都實現參數化

          6.4.2. 使用參數化查詢的另一個好處是可以減少查詢計劃緩存(query plan cache)污染

          6.4.3. 因為查詢計劃緩存的容量是有限的,如果你用大量的不同用戶名運行這個查詢,其他有用的查詢計劃條目將從緩存中被擠出,而緩存將被這些可能無用的條目填滿,這就叫作查詢計劃緩存污染

          6.5. 備份

          6.5.1. 回退是最糟糕的錯誤類型,會浪費我們的時間

          6.5.2. "3-2-1備份規則”(3-2-1 backup rule)

          6.5.2.1. 有三個獨立的備份,兩個在獨立的媒介上,一個在獨立的地點

          6.6. 跨站腳本攻擊

          6.6.1. 跨站腳本(cross-site scripting)攻擊應該被叫作“JavaScript注入攻擊”

          6.6.2. 第一階段是將JavaScript的代碼插入網頁當中

          6.6.3. 第二階段就是通過網絡傳輸更多的JavaScript代碼,并在網頁上執行

          6.6.4. 通過從其他會話中竊取會話cookie來捕獲這些會話,這個操作叫作會話劫持(session hijacking)

          6.6.5. 導致XSS攻擊出現的原因往往是存在問題的HTML代碼

          6.6.6. 抵御XSS攻擊的最簡單方法是對文本進行重編碼,使特殊的HTML字符被轉義

          6.6.7. CSP是應對XSS攻擊的另一個手段

          6.6.7.1. CSP(content security policy,內容安全策略)

          6.6.7.2. 它是一個HTTP頭,限制了可以從第三方服務器請求的資源

          6.6.7.3. 維護一個可信域列表并且使它保持最新狀態是一件很費力、費時的事情

          6.6.7.4. 無論你是否打算使用CSP,都應該注意正確編碼HTML輸出

          6.6.8. 只要不忽略注入HTML代碼和完全不進行編碼等問題,那么避免XSS攻擊還是很容易的

          6.7. 跨站請求偽造

          6.7.1. 在HTTP中,修改網絡內容的操作是用POST,而不是用GET來實現的,這是有原因的

          6.7.1.1. 你沒辦法生成指向POST地址的可單擊鏈接

          6.7.1.2. 它只能被POST一次,如果操作失敗,瀏覽器會警告你是否需要再次提交

          6.7.1.3. POST的這種性質使我們對它過于信任

          6.7.1.4. POST的隱患是,原始表單不一定要和POST請求所在的域相同

          6.7.1.4.1. 要避免這種問題的產生,可以對每個生成的form使用一個隨機生成的數字,這個數字會被復制在form本身和網站響應標題上

          6.7.1.4.2. 你需要確保它在服務器端也得到了驗證

          6.8. 永遠不要相信用戶的輸入


          主站蜘蛛池模板: 色偷偷一区二区无码视频| 久久久精品人妻一区亚美研究所 | 亚洲AV成人精品日韩一区| 亚洲AV无码一区二区三区牲色 | 波多野结衣中文一区| 久久精品国产第一区二区三区| 国产av夜夜欢一区二区三区| 亚洲视频免费一区| 国产高清在线精品一区二区| 国产成人一区二区三区高清| 亚洲日韩中文字幕一区| 久久无码人妻一区二区三区| 九九久久99综合一区二区| 免费萌白酱国产一区二区三区| 国产精久久一区二区三区| 波多野结衣一区二区三区高清在线| 欧美亚洲精品一区二区| 国产手机精品一区二区| 亚洲欧洲日韩国产一区二区三区 | 日本一区中文字幕日本一二三区视频| 亚洲AV无码一区二区三区人 | 国产自产V一区二区三区C| 久久精品中文字幕一区| 中文字幕亚洲一区| 伊人久久大香线蕉av一区| 中文人妻av高清一区二区| 免费日本一区二区| 肉色超薄丝袜脚交一区二区| 亚洲午夜一区二区电影院| 中文字幕av日韩精品一区二区| 综合无码一区二区三区四区五区| 99精品国产高清一区二区麻豆| 无码精品国产一区二区三区免费| 无码av免费一区二区三区| 国产一区二区成人| 色综合视频一区二区三区 | 精品福利一区二区三| 人妻少妇久久中文字幕一区二区| 精品人妻系列无码一区二区三区| 久久精品国内一区二区三区| 精品一区精品二区|