里主要是介紹下防止XSS的時機判斷,讓你明白XSS實質應該防止的位置
什么是XSS攻擊
它指的是惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執行,從而達到惡意攻擊用戶的特殊目的。
XSS是黑客,惡意用戶常用的注入漏洞,也是網站安全要考慮的問題
以Think PHP3.2框架為例
框架為了防止XSS(跨站腳本, cross site script)危害. 用戶通過script腳本, 控制web頁面的行為. 采用的策略: 在接收到瀏覽器端數據后, 將數據轉換為HTML實體編碼
這是框架的默認策略, 很low, 現在幾乎不用該策略
在接收數據時, 就完成實體編碼轉換. 主要的問題, “數據庫中存儲的不在是原始數據了. 而是處理過之后的數據”.
html實體編碼后的數據
目前的策略是:
在數據輸出到頁面時, 才進行html實體編碼轉換.
都是使用HTML實體編碼轉換, 但是, 時機不同. 合理的策略是輸出時. 而不是輸入時.
原因: script腳本, 只有在瀏覽器端運行, 才有執行意義. 存儲在數據庫中,沒有任何危害!
數據庫中不知道用戶到底真正輸入的是什么!
方案:
關閉, 輸入時, 自動實體編碼處理
將默認的過濾器關掉
將過濾方法默認為空
輸出時, 對可能發生的注入字段, 進行過濾:
模板中完成:
在需要的字段文章添加過濾
效果:
數據中, 存儲的是原始數據, 未轉換編碼的數據
保存的是原始數據
輸出時, 數據為實體編碼:
詳細講解太長,再簡單說一下對于Html編輯器的XSS的處理 應該是另一個方式
原因:
其他字段, title字段, 輸出時, 直接轉換為實體標記即可.
但是, 對于描述這種html編輯器的內容. 輸出時不能直接轉換. 因為 html代碼, 對于數據是有意義的.
處理方案: 將內容中的script部分, 轉換成實體. 非script部分, 不去處理.
實現:
自定義一個過濾器函數
使用正則替換實現,只對script標簽進行處理
定義成一個方法,再需要選擇的時候選用該函數
結果
數據庫中的數據:
輸出時:
本文主要是介紹XSS防止時機,更多相關資料可以聯系
子
前端其實只有三種技術:
html,css,js
后端有很多技術:
java,php,python,Ruby(github 就是ruby做的),.net…….
node.js(我們選擇的),
凡是能用JS能實現的,最終都會用js實現
其實他們都可以實現相同的功能
node.js是什么?
他不是什么:
· 不是一個語言
· 不是庫
· 不是框架
瀏覽器中的Javascript
ecmascrpt:
· 基本的語法
· if
· var
· funciton
· ….
bom
瀏覽器對象模型
dom
文檔對象模型
node.js中的javascript
沒有bom.dom :不處理頁面的
在node.js這個運行環境中為javascript提供了一些服務器級別的api
· 文件的讀寫
網絡服務的構建
網絡通信
http服務等
….
官網源說明
· Node.js? is a JavaScript runtime(運行時) built on Chrome’s V8 JavaScript engine.(它可以解析執行Js,以前只有瀏覽器可以解析執行js,可以說是一個運行環境,構建于chrome的V8
· Node.js uses an event-driven(事件驅動), non-blocking(非阻塞,簡單來講就是異步操作) I/O model that makes it lightweight and efficient.
· Node.js’ package ecosystem, npm, is the largest ecosystem of open source libraries in the world. (源自官網)(npm是基于nodejs開發的包管理工具)
絕大多數的javascript包都存放在了npm上,目的是讓開發人員更方便的使用
node.js介紹
能做什么?
· web服務器后臺
· 命令行工具
npm(基于node開發的)
git(c語言開發的)
hexo
….
對于前端開發工程師來講,我們接觸node 最多的其實是它的命令行工具
自己寫的很少,大多是用第三方的
webpack
gulp
npm
hexo
預備知識
簡單的命令行操作
cd
dir
is
mkdir
rm
推薦的書籍
《深入淺出node.js》:純理論,純底層,可以幫助理解底層(不推新手階段看)
《node.js權威指南》:API講解,沒有實戰,沒有業務,偏理論
《node入門》很重要,要看
node.js官方API
node.js中文社區:
《JavaScript 高級編程》第三版
《JavaScript 語言精粹》
能學到啥?
b/s編程模型:
browser-server
back-end
任何服務端技術 B/S 編程模型都是一樣的.和語言無管。就只是語言和api不同
模塊化編程:
requireJs
SeaJs
以前認知的js只能通過script標簽加載,在node中可以像@import一樣引用加載JS腳本文件
node.js常用的API
異步編程
回調函數
promise
async
generator
express web 開發框架
ecmascript6
一個新語法而已
安裝node環境
重新安裝就會覆蓋升級
確定node是否安裝成功:
cmd->node --version
node 中的JavaScript
1.emcaScript
沒有dom 和 bom
2.核心模塊
node為JavaScript提供了很多服務器級別的API,這些API絕大多數都被包裝到一個具名的核心模塊中去了
例如:文件操作的fs模塊,http服務構建的http模塊,path路徑操作模塊,os操作系統信息獲取……核心模塊想要使用需要引用。require就是用來加載模塊的
require
require 是一個方法,他的作用就是來加載模塊并執行里面代碼,在node中,模塊有三種
具名的核心模塊,例如:fs,http
用戶自己編寫的:就是自己寫的js文件,相對路徑必須加./,因為去了之后,node會把路徑當做核心模塊
require('./b.js')//.js的后綴名可以省略
在node中沒有全局作用域,只有模塊作用域
不同文件之間不會互相影響,就算調用,外部訪問不到內部,內部也訪問不到外部
3.第三方模塊(也可以是用戶自定義模塊)
要想訪問到, 可以用以下方法:
每個模塊(文件)都有一個exports對象,要想讓這個文件中的元素被外界訪問到,就需要把元素掛在到exports對象中。
require有兩個作用:
1.加載模塊文件并執行
2.拿到exports這個接口對象
IP和端口號
ip:一臺計算機只有一個物理網卡,在同一個局域網中,IP地址必須是唯一的。網卡是通過IP地址來進行定位的。
IP地址用來定位計算機。端口用來定位計算機中的軟件。
可以同時開啟多個服務,但是一定要確定占用的端口號不一樣(計算機中,同一個端口號,同一時間,只能被一個程序占用)
響應內容類型(Concent-Type)
中文亂碼問題
在服務器默認發送的數據,UTF8編碼的內容,但是瀏覽器不知道我們是UTF8編碼的內容,會按照計算機默認的操作系統去解析(中文操作系統時GBK編碼)
解決方法:正確的告訴瀏覽器,我給你發送的內容是什么編碼的
res.setHeader(‘Content-Type’,’text/plain;charset:utf-8’)
要想讓瀏覽器按照一定方式去渲染代碼,concent-type應有不同的形式:
text/html,text/plain
后記:對于大部分轉行的人來說,找機會把自己的基礎知識補齊,邊工作邊補基礎知識,真心很重要。
“我們相信人人都可以成為一個IT大神,現在開始,選擇一條陽光大道,助你入門,學習的路上不再迷茫。這里是北京尚學堂,初學者轉行到IT行業的聚集地。"
知乎上回答了一個網友的疑惑感覺蠻有意義,對于剛開始接觸的前端的人來說,還是需要用一些大白話方便他們去了解前端,降低學習的成本培養對于前端學習的熱情。
知乎網友: 我不是讀計算機的學生,看W3School自學完了HTML、CSS、JS和JQuery,接下來有什么辦法鞏固下技術嗎?前端學這些對于建站是不是足夠了呢?我自己計劃還要學習PHP。求高手指導下,謝謝。
針對這個問題的實際情況而言(純小白)
*請認真填寫需求信息,我們會在24小時內與您取得聯系。