电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解JavaScript是如何驗證URL的

瀏覽:77日期:2022-06-01 18:15:07
目錄
  • 前言
  • URL驗證
  • 如何執行URL驗證
  • 如何使用正則驗證
  • 安全使用JavaScript

前言

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

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

URL驗證

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

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

  • 使用正則字面量和構造函數
  • URL構造函數
  • isValidURL方法
  • Input元素
  • Anchor標簽方法

一個典型的URL驗證方案接收來自用戶的輸入,然后對其進行解析,以識別其各個組成部分。驗證方案可以確保所有的URL組件符合互聯網標準。例如,如果需要,它可以檢查URL是否使用安全協議。

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

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

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

現在,你已經有了這些基礎知識,讓我們來看看使用javascript的URL驗證吧。

如何執行URL驗證

在JavaScript中,執行URL驗證最簡單的方式是使用new URL構造函數。除此之外,它還得到了Node.js運行時和大多數瀏覽器的支持。

基本語法如下:

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

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

為了驗證URL,可以使用以下代碼:

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

該函數用于檢查URL的有效性。當URL有效時返回true,否則返回false。

  • 如果你傳遞www.urlcheck.com給該函數會返回false。因為該參數并不是一個有效的URL。正確版本應該是https://urlcheck.com。
  • 另一個例子是mailto:John.Doe@example.com。這是一個有效的URL,但如果移除了冒號,JavaScript就不再認為它是一個URL了。
  • 第三個例子是ftp://。這不是一個有效URL,因為沒有包含主機名。如果你添加兩個點(..),就會變成有效URL。因為點會被認為是一個主機名,也就是說ftp://..變成了一個有效的URL。

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

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

這些例子提醒我們,開發者應該依靠URL驗證原則,而不是專注于慣例。

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

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:";
}

該函數驗證URL,然后檢查URL是否使用HTTP或者HTTPS。在這里,ftp://..會被認為是無效的,因為它不包含HTTP或者HTTPS,而http://..依舊有效。

使用URL構造函數的一些其他方式包括:

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

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

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

let b = new URL(m);

為了給主機添加一個路徑名,我們的代碼結構如下:

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

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

URL模塊的另一個功能是,它實現了WHATWG URL API,它遵守WHATWG的URL標準,供瀏覽器使用:

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

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

如何使用正則驗證

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

使用regex進行URL驗證的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://或子域開始,以及是否包含域名??刂婆_上的語句結果是true,因為它遵循了由regex定義的URL語法。相反,下面的語句將返回一個false,因為它沒有以任何允許的方案或子域開始,也不包含域名:

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

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

為了滿足定義的正則表達式驗證檢查,瀏覽器必須在輸入字符串中進行數以百萬計的回溯。如此多的回溯檢查可能會導致"災難性的回溯",這種現象是復雜的正則表達式會凍結瀏覽器或使CPU核心進程爆滿。

安全使用JavaScript

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

在看到new URL函數的一些使用案例后,我們學習了如何用正則表達式驗證一個URL--并看到了為什么這種方法很麻煩而且容易出錯。

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

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

作者:Mannan Tirmizi

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

標簽: JavaScript
主站蜘蛛池模板: 液压压力机,液压折弯机,液压剪板机,模锻液压机-鲁南新力机床有限公司 | 软文发布-新闻发布推广平台-代写文章-网络广告营销-自助发稿公司媒介星 | 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 北京包装设计_标志设计公司_包装设计公司-北京思逸品牌设计 | 罗茨真空机组,立式无油往复真空泵,2BV水环真空泵-力侨真空科技 | 电采暖锅炉_超低温空气源热泵_空气源热水器-鑫鲁禹电锅炉空气能热泵厂家 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | PAS糖原染色-CBA流式多因子-明胶酶谱MMP-上海研谨生物科技有限公司 | 浙江建筑资质代办_二级房建_市政_电力_安许_劳务资质办理公司 | 渣土车电机,太阳能跟踪器电机,蜗轮蜗杆减速电机厂家-淄博传强电机 | 非小号行情 - 专业的区块链、数字藏品行情APP、金色财经官网 | 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | 中山市派格家具有限公司【官网】| 耐酸泵,耐腐蚀真空泵,耐酸真空泵-淄博华舜耐腐蚀真空泵有限公司 精密模具-双色注塑模具加工-深圳铭洋宇通 | 干培两用箱-细菌恒温培养箱-菲斯福仪器 | 注塑机-压铸机-塑料注塑机-卧式注塑机-高速注塑机-单缸注塑机厂家-广东联升精密智能装备科技有限公司 | 合肥弱电工程_安徽安防工程_智能化工程公司-合肥雷润 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 全国冰箱|空调|洗衣机|热水器|燃气灶维修服务平台-百修家电 | 衬氟旋塞阀-卡套旋塞阀-中升阀门首页| 全国冰箱|空调|洗衣机|热水器|燃气灶维修服务平台-百修家电 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 体视显微镜_荧光生物显微镜_显微镜报价-微仪光电生命科学显微镜有限公司 | 陶瓷加热器,履带式加热器-吴江市兴达电热设备厂 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 橡胶电子拉力机-塑料-微电脑电子拉力试验机厂家-江苏天源 | 济南货架定做_仓储货架生产厂_重型货架厂_仓库货架批发_济南启力仓储设备有限公司 | 隔爆型防爆端子分线箱_防爆空气开关箱|依客思 | 学校用栓剂模,玻璃瓶轧盖钳,小型安瓿熔封机,实验室安瓿熔封机-长沙中亚制药设备有限公司 | 密集架-手摇-智能-移动-价格_内蒙古档案密集架生产厂家 | 主题班会网 - 安全教育主题班会,各类主题班会PPT模板 | 无负压供水设备,消防稳压供水设备-淄博创辉供水设备有限公司 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | BESWICK球阀,BESWICK接头,BURKERT膜片阀,美国SEL继电器-东莞市广联自动化科技有限公司 | 废旧物资回收公司_广州废旧设备回收_报废设备物资回收-益美工厂设备回收公司 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | 无锡网站建设_企业网站定制-网站制作公司-阿凡达网络 |