整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          黑客實戰(zhàn)入門-XSS漏洞原理及實戰(zhàn)過程

          客基礎知識--通過一個實例讓你明白什么是XSS漏洞

          今天在漏洞盒子找漏洞的時發(fā)現(xiàn)一個理財網(wǎng)站具體的就不透露了就試了試 結(jié)果發(fā)現(xiàn)竟然存在一個存儲性xss于是決定搞一搞。其實xss在互聯(lián)網(wǎng)當中是非常常見的,接下來我就給大家介紹下xss漏洞的原理以及實戰(zhàn)。

          什么是XSS漏洞

          XSS攻擊:跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆。故將跨站腳本攻擊縮寫為XSS。XSS是一種經(jīng)常出現(xiàn)在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。比如這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)。這種類型的漏洞由于被駭客用來編寫危害性更大的phishing攻擊而變得廣為人知。對于跨站腳本攻擊,黑客界共識是:跨站腳本攻擊是新型的“緩沖區(qū)溢出攻擊“,而JavaScript是新型的“ShellCode”。

          XSS攻擊的危害包括

          1. 盜取各類用戶帳號權限(控制所盜竊權限數(shù)據(jù)內(nèi)容),如機器登錄帳號、用戶網(wǎng)銀帳號、各類管理員帳號
          2. 控制企業(yè)數(shù)據(jù),包括讀取、篡改、添加、刪除企業(yè)敏感數(shù)據(jù)的能力
          3. 基于XSS的跨站業(yè)務請求(如:非法轉(zhuǎn)賬、非法下單、非法轉(zhuǎn)載/發(fā)表內(nèi)容、發(fā)送電子郵件、利用管理員身份提權掛馬、控制受害者機器向其它網(wǎng)站發(fā)起攻擊等)
          4. 形成持久化APT攻擊,長期控制網(wǎng)站業(yè)務中樞
          5. 利用跨站業(yè)務形成蠕蟲病毒式傳播
          6. 劫持網(wǎng)站,劫持后可用于釣魚、偽裝、跳轉(zhuǎn)、掛廣告等,屬掛馬類型

          XSS跨站腳本,是一種Web安全漏洞,有趣是是他并不像SQL注入等攻擊手段攻擊服務端,本身對Web服務器沒有危害,攻擊的對象是客戶端,使用瀏覽器訪問這些惡意地址的網(wǎng)民。

          實戰(zhàn)環(huán)節(jié)

          打開頁面點擊登陸

          登陸完成后點擊設置

          點擊后如下:

          在理財目標出添加:" onfocus=alert`1` autofocus="true 創(chuàng)建一個聚焦事件

          保存后鼠標放到理財目標出就會觸發(fā)。

          XSS防御

          我們是在一個矛盾的世界中,有矛就有盾。只要我們的代碼中不存在漏洞,攻擊者就無從下手,我們要做一個沒有縫的蛋。XSS防御有如下方式。

          完善的過濾體系

          永遠不相信用戶的輸入。需要對用戶的輸入進行處理,只允許輸入合法的值,其它值一概過濾掉。

          Html encode

          假如某些情況下,我們不能對用戶數(shù)據(jù)進行嚴格的過濾,那我們也需要對標簽進行轉(zhuǎn)換。

          基于以上的講解,你明白了Xss了嗎?如還有問題請在評論區(qū)留言~

          者:HXGNMSL來源:CSDN原文:https://blog.csdn.net/HXGNMSL/article/details/89076476

          Javascript的歷史來源

          94年網(wǎng)景公司 研發(fā)出世界上第一款瀏覽器。

          95年 sun公司 java語言誕生

          網(wǎng)景公司和sun合作。

          Javascript ===> javascript

          JavaScript和ECMAScript的關系

          簡單來說ECMAScript不是一門語言,而是一個標準。符合這個標準的比較常見的有:JavaScript、Action Script(Flash中用的語言)

          JavaScript的基本結(jié)構(gòu):

          JavaScript的語法:

          JavaScript的基礎語法

          變量的聲明及使用

          數(shù)據(jù)類型

          運算符

          邏輯控制語句

          注釋

          語法規(guī)則

          變量的聲明語法:

          var變量名;

          例如:

          Var num;

          然后進行賦值:num = 10;也可以聲明時直接賦值:

          Var num =10;

          在JavaScript中,提供了常用的基本數(shù)據(jù)類型:

          undefined 未定義;

          null 空;

          string 字符串類型;

          boolean 布爾類型;

          number 數(shù)值類型;

          運算符:

          算數(shù)運算符:+、-、*、/、%、++、–;

          比較運算符:>、<、> =、< =、==、!=;

          邏輯運算符:&&、||、!;

          賦值運算符:=;

          邏輯控制語句:

          JavaScript的邏輯控制語句也分為兩類:條件結(jié)構(gòu)和循環(huán)機構(gòu)。

          條件結(jié)構(gòu)

          條件機構(gòu)分為if結(jié)構(gòu)和switch結(jié)構(gòu):

          If…else

          Switch

          循環(huán)結(jié)構(gòu)

          JavaScript的循環(huán)結(jié)構(gòu)的執(zhí)行順序與Java類似,主要包括以下幾種結(jié)構(gòu):

          for循環(huán)

          while循環(huán)

          do…while循環(huán)

          for…inx循環(huán)

          示例:

          for(var i=0;i<10;i++){

          Document.write(“*”);

          }

          輸出結(jié)果:**********

          循環(huán)中斷:

          用于循環(huán)中斷的語句有以下兩種:

          break.

          continue.

          與Java用法一樣,break是跳出循環(huán),continue是跳入下一次循環(huán)。

          函數(shù)

          函數(shù)有兩種:一種是系統(tǒng)函數(shù),一種是自定義函數(shù)

          常用的系統(tǒng)函數(shù)包括:

          parseInt():轉(zhuǎn)換為整數(shù)。

          parseFloat():轉(zhuǎn)換為浮點型。

          isNaN():判斷非數(shù)字。

          Eval():計算表達式值。

          自定義函數(shù):

          自定義函數(shù)的語法

          function 函數(shù)名(參數(shù)1,參數(shù)2,…){

          …//語句

          Return 返回值;//可選

          }

          函數(shù)的調(diào)用:

          函數(shù)的調(diào)用方式有以下兩種

          事件名=函數(shù)名(傳遞的實參值),例如:

          “函數(shù)名()”

          直接使用函數(shù)名(傳遞的實參值),例如:

          var recult = add(2,3);

          匿名函數(shù)

          匿名函數(shù)的語法

          var sumFun=function(num1,num2){

          return(nun1,num2);

          } ;

          在語法中:

          var sunFun=function(num1,num2)表示聲明一個變量等于某個函數(shù)體。

          {…};是把整個函數(shù)體放在變量的后面,并把末尾添加一個分號。

          匿名函數(shù)的調(diào)用:

          由于匿名函數(shù)定義的整個語句,可以像賦值一樣賦給一個變量進行保存,所以可以使用如下方式調(diào)用語法中的匿名函數(shù):

          var sum=sumFun(2,3)

          BOM概述

          使用BOM可以移動窗口,改變狀態(tài)欄中的文本,執(zhí)行其他與頁面內(nèi)容不直接相關的動作。它包含的對象主要有以下幾種;

          Window對象

          Window對象是指整個窗口對象,可以通過操作Window對象的屬性和方法控制窗口,例如,打開或關閉一個窗口。

          History對象

          瀏覽器訪問過的歷史頁面對應History對象,通過History對象的屬性和方法實現(xiàn)瀏覽器的前進或后退的功能。

          Location對象

          瀏覽器的地址欄對應Location對象,通過Location對象的屬性和方法控制頁面跳轉(zhuǎn)。

          Document對象

          瀏覽器內(nèi)的網(wǎng)頁內(nèi)容對應Document對象,通過Document對象的屬性和方法,控制頁面元素。

          Window常用的屬性有:

          history:有關客戶訪問過的URL的信息。

          location:有關當前URL的信息。

          Screen: 有關客戶端的屏幕和顯示性能的信息。

          Window對象常用的方法:

          prompt():顯示可提示用戶輸入的對話框。

          alert():顯示帶有一段消息和一個人“確認”按鈕的警告框。

          confirm():顯示帶有一段消息以及“確認”按鈕“取消”按鈕的對話框。

          close():關閉瀏覽器窗口。

          open():打開一個新的瀏覽器窗口,加載給定URL所指定的文檔。

          setTimeout():用于在指定(以毫秒計)后調(diào)用函數(shù)或計算表達式。

          setTneerval():按照指定的周期 (以毫秒計)數(shù)來調(diào)用函數(shù)或計算表達式。

          Window對象常用窗口特征屬性

          height、width:窗口文檔顯示區(qū)的高度、寬度,以像素計。

          left、top:窗口的x坐標y坐標,以像素計。

          toolbar:yes|no|1|0:是否顯示瀏覽器的工具欄,默認是yes。

          scrollbars =yes|no|1|0:是否顯示滾動條,默認是yes。

          locationyes|no|1|0:是否顯示地址欄,默認是yes。

          status|no|1|0:是否添加地址欄,默認是yes。

          menubar|no|1|0:是否顯示菜單欄,默認是yes。

          resizable|no|1|0:窗口是否可調(diào)節(jié)尺寸,默認是yes。

          Window對象的常用事件:

          onload:一個頁面或一副圖像完成加載。

          onmouseover:鼠標指針移到某元素之上。

          onclick:單擊某個對象。

          onkeydown:某個鍵盤按鍵被按下。

          onchange:域的內(nèi)容被改變。

          History對象的方法:

          back():加載History對象列表中的上一個URL。

          forward():加載History對象列表中的下一個URL。

          go():加載History對象列表中的某個具體URL。

          Location對象的屬性:

          host:設置或返回主機名和當前URL的端口號。

          hostname:設置或返回當前URL的主機名。

          href:設置或返回完整的URL。

          Location對象的方法:

          reload():重新加載當前文檔。

          replace():用新的文檔替換當前文檔。

          Document對象常用的屬性:

          referrer:返回載入當前文檔的URL。

          URL:返回當前文檔的URL。

          Document對象的常用方法:

          getElementById():返回對擁有指定id的第一個對象的引用。

          getElementsByName():返回帶有指定名稱的對象的集合。

          getElementsByTagName():返回帶有指定標簽名的對象的集合。

          write():向文檔寫文本、HTML表達式代碼。

          內(nèi)置對象

          系統(tǒng)的內(nèi)置對象有Date對象、Array對象、String對象和Math對象等。

          Date:用于操作日期和時間。

          Array:用于在單獨的變量名中儲存一系列的值。

          String:用于支持對字符串的處理。

          Math:用于執(zhí)行數(shù)學任務,包含了若干數(shù)字常量和函數(shù)。

          Date對象:

          1:創(chuàng)建日期對象

          Date對象包含日期和時間兩個信息,創(chuàng)建日期對象的基本語法有兩種:

          創(chuàng)建日期的基本語法1: var 日期實例化=new Date(參數(shù));

          創(chuàng)建日期的基本語法2: var 日期實例化=new Date();

          Date對象的常用方法:

          getDate():從Date對象返回一個月中的某一天,其值介于1到31之間。

          getDay():從Date對象返回星期中的某一天,其值介于0到6之間。

          getHours():返回Date對象的小時,其值介于0到23之間。

          getMinutes():返回Date對象的分鐘,其值介于0到59之間。

          getSeconds():返回Date對象的秒數(shù),其值介于0到59之間。

          getMonth():返回Date對象的月份,其值介于0到11之間。

          getFullYear():返回Date對象的年份,其值為4位數(shù)。

          getTime():返回自某一時刻(2010年1月1日)以來的毫秒數(shù)。

          DOM概述

          什么是DOM

          DOM是文檔對象的縮寫,和語言無關。它提供了訪問、動態(tài)修改結(jié)構(gòu)文檔的接口,W3C制定了DOM規(guī)范,主流瀏覽器都支持。

          使用Core DOM操作節(jié)點

          訪問節(jié)點:

          使用getElement系列方法訪問指定節(jié)點。

          getElementById():返回對擁有指定id的第一個對象的引用。

          getElementsByName():返回帶有指定名稱的對象的集合。

          getElementsByTagName():返回帶有指定標簽名的對象的集合。

          使用層次關系訪問節(jié)點。

          parenNode:返回節(jié)點的父節(jié)點。

          firstChild:返回節(jié)點的首個節(jié)點。文本和屬性節(jié)點沒有父節(jié)點,會返回一個空數(shù)組,對于元素節(jié)點,若是沒有子節(jié)點會返回null。

          lastChild:返回節(jié)點的最后一個子節(jié)點,返回值同firstChild。

          操作節(jié)點屬性值

          CoreDOM的標準方法包括以下兩種:

          getAttribute(“屬性名”):獲取屬性值。

          getAttribute(“屬性名”,“屬性值”):設置屬性值

          創(chuàng)建和增加節(jié)點:

          創(chuàng)建節(jié)點

          createElement(tagName):按照給定的標簽名稱創(chuàng)建一個新的元素節(jié)點

          appendChild(nodeName):向以存在節(jié)點列表的末尾添加新的節(jié)點。

          inserBefore(newNode,oldNode):向指定的節(jié)點之前插入一個新的子節(jié)點。

          cloneNode(deep):復制某個指定的節(jié)點。

          刪除和替換節(jié)點

          removeChild(node):刪除指定的節(jié)點。

          replaceChild(newNode,oldNode):用其他的節(jié)點替換指定的節(jié)點。

          Table對象的屬性和方法

          屬性:

          rows[]:返回包含表格中所有行的一個數(shù)組。

          rows[]用于返回表格中所有行的一個數(shù)組。

          方法:

          inserRow():在表格中插入一個新行。

          deleteRow():從表格中刪除一行。

          數(shù)組

          數(shù)組是具有相同數(shù)據(jù)類型的一個或多個值得集合

          創(chuàng)建數(shù)組的語法:

          var 數(shù)組名稱=new Array(size);

          數(shù)組的賦值的兩種方式:

          先聲明在賦值

          var province = new Array(4);

          province[0]=“河北省”;

          province[1]=“河南省”;

          索引也可以使用標識(字符串),例如:

          var province=new Array(4);

          province[‘河北省’]=“河北省”;

          province[‘河南省’]=“河南省”;

          聲明時同時初始化

          var province=new Array(“河北省”,“河南省”,“湖北省”,“廣東省”);

          Array對象的常用屬性和方法:

          屬性:

          length:設置或返回數(shù)組中元素的數(shù)目。

          方法:

          join():把數(shù)組的所有元素放入一個字符串,通過一個分隔符進行分割。

          sort():對數(shù)組的元素進行排序。

          于TypeScript的先天優(yōu)勢,TypeScript越來越受歡迎。那問題來了:TypeScript 和 JavaScript 究竟哪個更好?JavaScript真的會敗北嗎?

          作者 | Mahdhi Rezvi

          譯者 | 明明如月,責編 | 郭芮

          以下為譯文:

          你以前可能曾聽說過“TypeScript”這個詞。到現(xiàn)在 2019年,TypeScript 在 GitHub 最常用編程語言排行榜排名第 7 位,在增速最快的編程語言排行榜中占第 5 位。

          TypeScript (TS) 是微軟開發(fā)的一種開源編程語言,可以編譯成 JavaScript (JS) 代碼。自 2012 年發(fā)布以來,這門語言一直保持活躍發(fā)展并且越發(fā)受歡迎。

          在早期,開發(fā)社區(qū)就將 TypeScript 和 Angular 緊密聯(lián)系在一起。盡管用 JS 也不是不行,但是 Angular 強迫你使用 TypeScript。

          TypeScript 和 JavaScript 的區(qū)別是什么?

          Typescript 是 JavaScript 的超集,可以被編譯成 JavaScript 代碼。 用 JavaScript 編寫的合法代碼,在 TypeScript 中依然有效。 Typescript 是純面向?qū)ο蟮木幊陶Z言,包含類和接口的概念。 程序員可以用它來編寫面向?qū)ο蟮姆斩嘶蚩蛻舳顺绦颍⑺鼈兙幾g成 JavaScript 代碼。

          TypeScript和 JavaScript的關系,圖源:GeeksforGeeks

          TypeScript 引入了很多面向?qū)ο蟪绦蛟O計的特征,包括:

          • interfaces 接口

          • classes 類

          • enumerated types 枚舉類型

          • generics 泛型

          • modules 模塊

          主要不同點如下:

          • TS 是一種面向?qū)ο缶幊陶Z言,而 JS 是一種腳本語言(盡管 JS 是基于對象的)。

          • TS 支持可選參數(shù), JS 則不支持該特性。

          • TS 支持靜態(tài)類型,JS 不支持。

          • TS 支持接口,JS 不支持接口。

          為什么要用 TypeScript ?

          • TS 在開發(fā)時就能給出編譯錯誤, 而 JS 錯誤則需要在運行時才能暴露。

          • 作為強類型語言,你可以明確知道數(shù)據(jù)的類型。代碼可讀性極強,幾乎每個人都能理解。

          • TS 非常流行,被很多業(yè)界大佬使用。像 Asana、Circle CI 和 Slack 這些公司都在用 TS。

          為什么不該用 TypeScript ?

          • TS 需要編譯。TS 得通過編譯才能變成 JS 代碼。

          • 隨著時間的推移,類型可能變得非常復雜。當項目不斷變大時這種情況十分常見。

          • 盡管 TS 是類型安全的,在有些情況下編譯器也有檢查不出任何錯誤的情況。當我們修改編譯后的 JS 代碼時,錯誤就不可檢測了。不過隨著編譯器不斷改進,這種情況會越來越少。

          摘要


          JavaScriptTypeScript
          語言腳本語言面向?qū)ο缶幊陶Z言
          學習難度靈活易學需要有腳本編程經(jīng)驗
          類型輕量級解釋編程語言強類型的面向?qū)ο缶幊陶Z言
          客戶端/服務端客戶端服務端都有側(cè)重客戶端
          拓展名.js.ts 或 .tsx
          耗時更快編譯代碼需要些時間
          數(shù)據(jù)綁定沒有類型和接口的概念使用類型和接口表示數(shù)據(jù)
          注解不需要注解使用注解才能最大限度發(fā)揮 TypeScript的特性
          語法所有的語句都寫在腳本標簽內(nèi)。瀏覽器將腳本標簽內(nèi)的文本識別為腳本一個 TypeScript 程序由模塊、方法、變量、語句、表達式和注釋構(gòu)成。
          靜態(tài)類型JS 中沒有靜態(tài)類型的概念支持靜態(tài)類型
          模塊支持不支持模塊支持模塊
          接口沒有接口支持接口
          可選參數(shù)方法不支持支持
          原型沒有這種特性支持原型特性
          開發(fā)者社區(qū)JS 使用范圍很廣,被編程社區(qū)廣泛接受和使用TS 比較新,編程社區(qū)相對較小
          參考選擇小型項目TS 是一種面向?qū)ο笳Z言,代碼更簡潔,可讀性和復用性強。因此 TS 更適合大型項目。

          表格來自:Edureka

          結(jié)論

          那問題來了:TypeScript 和 JavaScript 哪個更好?

          由于 TS 的先天優(yōu)勢,TS 越來越受歡迎。但是請記住,TS 最終不可能取代 JS,因為 JS 是 TS 的核心。

          選擇 TypeScript 還是 JavaScript 要由開發(fā)者自己去做決定。如果你喜歡類型安全的語言,那么推薦你選擇 TS。 如果你已經(jīng)用 JS 好久了,你可以選擇走出舒適區(qū)學習 TS,也可以選擇堅持自己的強項,繼續(xù)使用 JS。

          本文到此結(jié)束,希望你能有所收獲,輕松快樂的學習。

          原文:https://medium.com/javascript-in-plain-english/is-typescript-the-way-forward-659caa2cb10f

          作者:Mahdhi Rezvi,移動開發(fā)工程師,曼徹斯頓大學計算機專業(yè)本科生,熱衷學習新技術。譯者:明明如月,知名互聯(lián)網(wǎng)公司 Java 高級開發(fā)工程師,CSDN 博客專家。

          本文為 CSDN 翻譯,轉(zhuǎn)載請注明來源出處。


          主站蜘蛛池模板: 国产成人一区二区三区电影网站 | 性色av无码免费一区二区三区| 国产精品福利一区二区| 无码人妻av一区二区三区蜜臀| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 国产女人乱人伦精品一区二区 | 亚洲中文字幕无码一区| 97久久精品午夜一区二区| 免费视频精品一区二区| 精品福利一区3d动漫| 精品日本一区二区三区在线观看 | 午夜无码一区二区三区在线观看| 无码人妻精品一区二| 日韩伦理一区二区| 国产精品视频一区| 国产精品视频一区二区猎奇| 精品国产亚洲一区二区三区在线观看 | 色窝窝无码一区二区三区成人网站 | 亚洲AV无码一区二区大桥未久| 国产一区二区三区电影| 国产精品一区二区久久乐下载| 国产乱码精品一区二区三区| 日韩一区二区三区射精| 精品国产免费一区二区| 日韩av片无码一区二区三区不卡| 色视频综合无码一区二区三区 | 成人国内精品久久久久一区| 曰韩精品无码一区二区三区| 久久精品免费一区二区三区| 无码中文人妻在线一区二区三区| 一本大道在线无码一区| 日本道免费精品一区二区| 中文字幕一区在线观看视频| 亚洲一区二区三区高清在线观看 | 变态拳头交视频一区二区| 国产在线精品一区二区不卡麻豆 | 麻豆AV无码精品一区二区| 色窝窝免费一区二区三区 | 国产精品伦一区二区三级视频 | 无码人妻精一区二区三区| 精品在线一区二区三区|