日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

詳解JavaScript是如何驗(yàn)證URL的

瀏覽:41日期:2022-06-01 18:15:07
目錄
  • 前言
  • URL驗(yàn)證
  • 如何執(zhí)行URL驗(yàn)證
  • 如何使用正則驗(yàn)證
  • 安全使用JavaScript

前言

當(dāng)開發(fā)者需要為不同目的以不同形式處理URL時,比如說瀏覽器歷史導(dǎo)航,錨點(diǎn)目標(biāo),查詢參數(shù)等等,我們經(jīng)常會借助于JavaScript。然而,它的頻繁使用促使攻擊者利用其漏洞。這種被利用的風(fēng)險是我們必須在我們的JavaScript應(yīng)用程序中實(shí)現(xiàn)URL驗(yàn)證的原因。

URL驗(yàn)證檢查URL是否遵循正確的URL語法,也就是每個URL必須具備的結(jié)構(gòu)。URL驗(yàn)證可以使我們的應(yīng)用程序免遭基于URL的漏洞,比如惡意腳本注入和服務(wù)器端請求偽造(SSRF)。當(dāng)我們在獲取遠(yuǎn)程資源時沒有應(yīng)用安全編碼慣例來驗(yàn)證用戶提供的URL時,惡意行為者可以采用SSRF攻擊。

URL驗(yàn)證

URL驗(yàn)證的存在是為了加強(qiáng)安全,防止可能存在的漏洞,并消除運(yùn)行代碼時產(chǎn)生的任何錯誤的機(jī)會。但是我們應(yīng)該在什么時候使用URL驗(yàn)證,在這個過程中我們要驗(yàn)證什么呢?我們應(yīng)該在所有必須識別和驗(yàn)證諸如網(wǎng)頁、圖片、gif和視頻等資源的軟件中實(shí)施URL驗(yàn)證。

一個典型的URL包括多個片段,比如協(xié)議、域名、主機(jī)名、資源名、URL源、端口等等。這些用來告訴瀏覽器如何追蹤指定的資源。我們可以以不同的方式來驗(yàn)證URL:

  • 使用正則字面量和構(gòu)造函數(shù)
  • URL構(gòu)造函數(shù)
  • isValidURL方法
  • Input元素
  • Anchor標(biāo)簽方法

一個典型的URL驗(yàn)證方案接收來自用戶的輸入,然后對其進(jìn)行解析,以識別其各個組成部分。驗(yàn)證方案可以確保所有的URL組件符合互聯(lián)網(wǎng)標(biāo)準(zhǔn)。例如,如果需要,它可以檢查URL是否使用安全協(xié)議。

主機(jī)名驗(yàn)證首先是將主機(jī)名分成獨(dú)立的標(biāo)簽,以確保它們符合頂級域名規(guī)范。一個典型的主機(jī)名由至少兩個用點(diǎn)分隔的標(biāo)簽組成。例如,www.snyk.com 有 "www"、"snyk"和 "com"的標(biāo)簽。每個標(biāo)簽只能由一個字母數(shù)字字符或一個連字符組成,無論大小寫。然后,驗(yàn)證方案可以確保主機(jī)名與URL的允許列表相匹配,以確保只允許指定的URL,并且允許的URL不會被錯誤地取消資格。

默認(rèn)情況下,URL中使用的大多數(shù)資源的路徑都是允許的。然而,端口只能在1到65536的范圍內(nèi)。任何超出這個范圍的東西都應(yīng)該拋出一個錯誤。我們還可以檢查數(shù)字IP地址,以判斷它是一個IPV4地址還是IPV6地址。

最后,我們也可以檢查URL的用戶名和密碼。這個功能有助于遵守公司政策和憑證保護(hù)。

現(xiàn)在,你已經(jīng)有了這些基礎(chǔ)知識,讓我們來看看使用javascript的URL驗(yàn)證吧。

如何執(zhí)行URL驗(yàn)證

在JavaScript中,執(zhí)行URL驗(yàn)證最簡單的方式是使用new URL構(gòu)造函數(shù)。除此之外,它還得到了Node.js運(yùn)行時和大多數(shù)瀏覽器的支持。

基本語法如下:

new URL (url)
new URL (url , base)

如果提供相對URL,JavaScript只需要base元素。如果不提供相對URL,默認(rèn)為undefined。另外,如果提供一個具有絕對URL的base元素,JavaScript會忽略base元素。

為了驗(yàn)證URL,可以使用以下代碼:

function checkUrl (string) {
  let givenURL ;
  try {
      givenURL = new URL (string);
  } catch (error) {
      console.log ("error is", error);
     return false; 
  }
  return true;
}

該函數(shù)用于檢查URL的有效性。當(dāng)URL有效時返回true,否則返回false

  • 如果你傳遞www.urlcheck.com給該函數(shù)會返回false。因?yàn)樵搮?shù)并不是一個有效的URL。正確版本應(yīng)該是https://urlcheck.com
  • 另一個例子是mailto:John.Doe@example.com。這是一個有效的URL,但如果移除了冒號,JavaScript就不再認(rèn)為它是一個URL了。
  • 第三個例子是ftp://。這不是一個有效URL,因?yàn)闆]有包含主機(jī)名。如果你添加兩個點(diǎn)(..),就會變成有效URL。因?yàn)辄c(diǎn)會被認(rèn)為是一個主機(jī)名,也就是說ftp://..變成了一個有效的URL。

重要的是要記住,非常規(guī)的、但完全有效的URL是存在的!它們可能對從事這些工作的開發(fā)人員來說是意外的,但在其他方面是完全合適的。例如,以下兩個URL都會返回真值:

  • new URL("youtube://a.b.c.d");
  • new URL("a://1.2.3.4@1.2.3.4");

這些例子提醒我們,開發(fā)者應(yīng)該依靠URL驗(yàn)證原則,而不是專注于慣例。

如果你想確保有效的URL包含一些特定的URL方案,你可以使用以下函數(shù):

function checkHttpUrl(string) {
  let givenURL;
  try {
      givenURL = new URL(string);
  } catch (error) {
      console.log("error is",error)
    return false;  
  }
  return givenURL.protocol === "http:" || givenURL.protocol === "https:";
}

該函數(shù)驗(yàn)證URL,然后檢查URL是否使用HTTP或者HTTPS。在這里,ftp://..會被認(rèn)為是無效的,因?yàn)樗话琀TTP或者HTTPS,而http://..依舊有效。

使用URL構(gòu)造函數(shù)的一些其他方式包括:

let m = "<https://snyk.io>";
let a = new URL("/", m);

上述示例使用了base元素。記錄下這個值,我們就可以得到https://snyk.io/

要返回一個URL對象而不指定base參數(shù)的話,語法是:

let b = new URL(m);

為了給主機(jī)添加一個路徑名,我們的代碼結(jié)構(gòu)如下:

let d = new URL("/en-US/docs", b);

存儲在變量d上的URL是https://snyk.io/en-US/docs

URL模塊的另一個功能是,它實(shí)現(xiàn)了WHATWG URL API,它遵守WHATWG的URL標(biāo)準(zhǔn),供瀏覽器使用:

let adr = new URL("<https://snyk.io/en-US/docs>");
let host = adr.host;
let path = adr.pathname;

在上面的例子中,我們創(chuàng)建了一個名為adr的URL對象。接著,代碼獲取URL的主機(jī)和路徑名,分別是snyk.io/en-US/docs。最后,我們可以將URL和允許列表或者黑名單進(jìn)行對比,確保只有特定URL是被允許的。

如何使用正則驗(yàn)證

另一種驗(yàn)證URL的方法是使用正則表達(dá)式(regex)。我們可以使用Regex來檢查URL是否有效。

使用regex進(jìn)行URL驗(yàn)證的JavaScript語法是:

function isValidURL(string) 
  {
      var res = 
      string.match(/(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-
      ]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]
      \.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|w
      ww\.[a-zA-Z0-9]+\.[^\s]{2,})/gi);
		  return (res !== null);
  };

來測試一些URL:

var tc1 = "<http://helloworld.com>"
console.log(isValidURL(tc1));

regex定義的URL語法檢查URL是否以http://https://或子域開始,以及是否包含域名。控制臺上的語句結(jié)果是true,因?yàn)樗裱擞蓃egex定義的URL語法。相反,下面的語句將返回一個false,因?yàn)樗鼪]有以任何允許的方案或子域開始,也不包含域名:

var tc4 = "helloWorld";
console.log (isValidURL(tc4));

上面的正則表達(dá)式相對簡單,但仍然難以駕馭。這也是一個容易出錯的方法,因?yàn)橐粋€正則表達(dá)式不能充分處理驗(yàn)證URL的規(guī)則。它最多只能做到匹配有效的URL。此外,當(dāng)一個正則表達(dá)式要么包含復(fù)雜的驗(yàn)證邏輯,要么收到冗長的輸入字符串時,執(zhí)行驗(yàn)證檢查就變得很耗時。

為了滿足定義的正則表達(dá)式驗(yàn)證檢查,瀏覽器必須在輸入字符串中進(jìn)行數(shù)以百萬計的回溯。如此多的回溯檢查可能會導(dǎo)致"災(zāi)難性的回溯",這種現(xiàn)象是復(fù)雜的正則表達(dá)式會凍結(jié)瀏覽器或使CPU核心進(jìn)程爆滿。

安全使用JavaScript

正如SSRF被添加到新的OWASP Top 10中所證明的那樣,URL驗(yàn)證對于JavaScript應(yīng)用程序的安全性已經(jīng)變得越來越關(guān)鍵。幸運(yùn)的是,我們可以通過在服務(wù)器端驗(yàn)證URL來幫助緩解此類攻擊。此外,根據(jù)驗(yàn)證和處理URL的首選方式來使用new URL函數(shù)會非常有益。

在看到new URL函數(shù)的一些使用案例后,我們學(xué)習(xí)了如何用正則表達(dá)式驗(yàn)證一個URL--并看到了為什么這種方法很麻煩而且容易出錯。

URL的安全風(fēng)險與其說是關(guān)于其有效性,不如說是關(guān)于危險的URL方案。因此,我們需要確保讓服務(wù)器端的應(yīng)用程序進(jìn)行驗(yàn)證。攻擊者可以繞過客戶端的驗(yàn)證機(jī)制,所以僅僅依靠它并不是解決辦法。

本文譯自:https://snyk.io/blog/secure-javascript-url-validation/

作者:Mannan Tirmizi

到此這篇關(guān)于詳解JavaScript是如何驗(yàn)證URL的的文章就介紹到這了,更多相關(guān)JavaScript驗(yàn)證URL內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩国产一区精品一区| 亚洲一区二区日韩| 麻豆视频观看网址久久| 欧美激情福利| 伊人网在线播放| 欧美日韩中文一区二区| 亚洲黄页一区| 在线精品观看| 日本午夜精品视频在线观看| 国产精品一线天粉嫩av| 国产一精品一av一免费爽爽| 精品一区不卡| 久久国产中文字幕| 婷婷精品在线观看| 久久精品国产久精国产| 久久一级电影| 亚洲aa在线| 国产一区一一区高清不卡| 欧美日韩一二| 久久精品xxxxx| 欧美sss在线视频| 人人精品人人爱| 国产精品久久久久77777丨| 日韩中文影院| 日韩成人一级| 91中文字幕精品永久在线| 亚洲欧洲一区二区天堂久久| 国产欧美一区二区三区精品观看| 亚洲美女久久精品| 亚洲三级在线| 欧美freesex黑人又粗又大| 亚洲小说春色综合另类电影| 岛国精品一区| 中文字幕免费精品| 水蜜桃久久夜色精品一区| 久久福利一区| 91综合网人人| 亚洲精品极品| 在线日韩av| 欧美91视频| 亚洲制服一区| 老司机精品久久| 欧美aa在线视频| 亚洲手机在线| 国产精品1区| 国产一区91| 精品美女在线视频| 热久久免费视频| 成人美女视频| 国产精品主播| 人人爽香蕉精品| 色天使综合视频| 国产精品国码视频| 蜜桃视频一区二区三区在线观看| 国产一区二区久久久久| 国产精品嫩草99av在线| 精品国产中文字幕第一页| 免费的成人av| 亚洲二区视频| 国产美女高潮在线| 欧美黑人巨大videos精品| 亚洲三级国产| 99在线观看免费视频精品观看| 国产精品一线| 精品国产亚洲一区二区三区大结局| 青青草精品视频| 亚洲一区二区三区四区五区午夜 | 亚洲精品自拍| 亚洲第一区色| 日韩欧美精品| 国产91在线精品| 国产欧美三级| 亚洲精品四区| 尤物网精品视频| 米奇777超碰欧美日韩亚洲| 高清一区二区三区| 国产精品玖玖玖在线资源| 日本va欧美va欧美va精品| 午夜欧美精品| 久久精品亚洲欧美日韩精品中文字幕| 精品国产欧美| 久久99蜜桃| 日本v片在线高清不卡在线观看| 国产午夜精品一区二区三区欧美| 欧美日韩一区二区综合| 成人羞羞在线观看网站| 日产精品一区二区| 精品黄色一级片| 欧美a在线观看| 国产精品中文| 免费在线日韩av| 麻豆精品99| 精品深夜福利视频| 91亚洲人成网污www| 久久久男人天堂| 日韩在线欧美| 四虎国产精品免费观看| 久久精品国产亚洲aⅴ| 久久永久免费| 国产粉嫩在线观看| 日本欧美不卡| 亚洲午夜av| 尤物精品在线| 美国三级日本三级久久99| 亚洲欧美视频一区二区三区| 免费看欧美美女黄的网站| 亚洲深夜福利在线观看| 日本久久一区| 欧美精品91| 高清不卡一区| 99热国内精品| 日韩视频中文| 亚洲区第一页| 久久99蜜桃| 日韩在线短视频| 国产一区日韩一区| 爽爽淫人综合网网站| 日本精品久久| 久久香蕉精品香蕉| 成人精品天堂一区二区三区| 中文欧美日韩| 日本欧美久久久久免费播放网| 国产精品九九| 蜜桃国内精品久久久久软件9| 亚洲伊人精品酒店| 久久精品国产久精国产爱| 亚洲成人av观看| 久久高清国产| 久久av超碰| 精品91久久久久| 久久狠狠久久| 麻豆精品蜜桃| 日本va欧美va瓶| 福利一区二区三区视频在线观看| 在线一区电影| 国产乱人伦精品一区| 久久久精品日韩| 亚洲欧美日本国产| 精品久久一区| 久久亚洲图片| 国产一区二区三区探花| 亚洲国产日韩欧美在线| 日韩av三区| 少妇精品导航| 青青青国产精品| 激情欧美日韩一区| 国产欧美日韩在线一区二区 | 欧美国产专区| 黄色成人91| 精品成av人一区二区三区| 亚洲一区免费| 日韩在线视频精品| 欧美日本不卡高清| 中文另类视频| 国产乱人伦精品一区| 野花国产精品入口| 久久伊人久久| 日韩制服丝袜av| 香蕉成人av| 国产精品magnet| 日韩精品一区第一页| 日韩理论视频| 国产一区 二区| 蜜桃视频第一区免费观看| 成人福利av| 国产精品嫩模av在线| 日韩午夜在线| 一区二区三区四区日本视频| 只有精品亚洲| 亚洲国产影院| 成人在线免费观看91| 国产视频一区二| 蜜桃视频一区二区| 亚洲精品网址| 亚洲www啪成人一区二区| 精品久久亚洲| 国产精品密蕾丝视频下载| 亚洲精品一二| 免费在线观看成人| 亚洲免费一区二区| 欧美精品激情| 欧美日韩国产一区二区三区不卡 | 欧美精品福利| 一区二区三区网站| 伊人久久亚洲美女图片| 久久青草久久| av中文字幕在线观看第一页| 嫩呦国产一区二区三区av| 欧美日韩18| 日韩成人在线看| 日韩福利视频导航| 亚洲91在线| 少妇精品在线| 天堂va在线高清一区| 在线精品福利| 免费看欧美美女黄的网站| 9色精品在线| 久久午夜精品| 亚洲香蕉久久| 亚洲理论在线|