欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript的原型存在的安全問題及解決辦法

 更新時間:2023年08月23日 11:38:47   作者:zayyo  
JavaScript的原型很多人都知道也很好用,但是很多人在使用原型繼承中導(dǎo)致的安全問題卻很少人知道,接下來我們就來好好了解一下,感興趣的小伙伴跟著小編一起來看看吧

JavaScript的原型很多人都知道也很好用,但是很多人在使用原型繼承中導(dǎo)致的安全問題卻很少人知道,接下來我們就來好好了解一下。

在真實開發(fā)中,我們經(jīng)常會在代碼中使用Property accessors 屬性訪問器,并且使用用戶輸入的參數(shù)去訪問某個對象的屬性。這看起來可能是一個很稀疏平常的操作,但是往往在這個過程中我們的代碼就已經(jīng)產(chǎn)生了一個很大的安全漏洞?。。?/p>

為什么這樣寫代碼會產(chǎn)生安全問題?

我們可以看來一下,下面的一個示例

我們的訪問代碼

const internal = {
  foo: {
    bar: null
  }
}
const acceptUserInput = (type, subtype, value) => {
  internal[type][subtype] = value
}

應(yīng)用:

// 正常的訪問
acceptUserInput('foo', 'bar', 'I am so clever')
// 惡意攻擊
acceptUserInput('__proto__', 'polluted', '你好我是黑客,權(quán)限是允許')

在我們的惡意攻擊中,我們向我們的原型上添加了一個polluted屬性。導(dǎo)致我們所有新創(chuàng)建的對象都會多出一個polluted屬性,屬性的值是“你好我是黑客,權(quán)限是允許”,這就給了不懷好意的壞人,一個可乘之機。

const obj = {}
console.debug(obj.polluted) // '你好我是黑客,權(quán)限是允許'

為什么會不安全呢?

如果在客戶端上,這可能問題不大,如果這是在服務(wù)器上,那就可能會為黑客攻擊提供漏洞。

假設(shè)黑客知道你的代碼在運行時會創(chuàng)建一個新對象,并且你沒有使用Object.create(null)創(chuàng)建一個沒有原型的對象。

黑客通過在原型上添加屬性,他們可以解鎖更多用戶權(quán)限,比如網(wǎng)站修改權(quán)限,vip權(quán)限等等來攻擊你的網(wǎng)站讓你的網(wǎng)站承受損失。

代碼示例

const internal = {
  foo: {
    bar: null
  }
}
const acceptUserInput = (type, subtype, value) => {
  internal[type][subtype] = value
}
// 假設(shè)一個object
// object在代碼運行時被創(chuàng)建
// 假設(shè)數(shù)據(jù)的獲取來自數(shù)據(jù)庫
const getRoles = () => ({ canAccessThat: true })
const userCanAccessThis = () => {
  const me = getCurrentUser() // 從會話等中獲取
  const roles = getRoles(me.id)
  return roles.canAccessThis === true
}
// 惡意攻擊
acceptUserInput('__proto__', 'canAccessThis', true)
// 現(xiàn)在每一個用戶都會返回每個用戶的canAccessThis都是true
userCanAccessThis()

這是一個簡單的模擬案例,可以讓我們更直觀的看到這個漏洞的威力。

怎么防止漏洞的產(chǎn)生?

  • 在代碼中減少屬性訪問器的使用盡可能使用.的方式去訪問對象的屬性
  • 或者使用 MapSet,來代替我們的對象
  • 檢查對象的原型鏈,查看新創(chuàng)建對象的原型是否被惡意添加了原本不該有的屬性,或者屬性被修改
  • 檢查用戶的輸入,只有防止用戶惡意輸入
  • 用于Object.create(null)創(chuàng)建沒有原型的對象

到此這篇關(guān)于JavaScript的原型存在的安全問題及解決辦法的文章就介紹到這了,更多相關(guān)JavaScript原型存在的問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • webpack 如何同時輸出壓縮和未壓縮的文件的實現(xiàn)步驟

    webpack 如何同時輸出壓縮和未壓縮的文件的實現(xiàn)步驟

    這篇文章主要介紹了webpack 如何同時輸出壓縮和未壓縮的文件的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • js驗證賬戶名是否重復(fù)

    js驗證賬戶名是否重復(fù)

    這篇文章主要為大家詳細介紹了js驗證賬戶名是否重復(fù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • ES11新增的這9個新特性,你都掌握了嗎

    ES11新增的這9個新特性,你都掌握了嗎

    這篇文章主要介紹了ES11新增的這9個新特性,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • JavaScript如何正確的寫代碼注釋

    JavaScript如何正確的寫代碼注釋

    這篇文章主要給大家介紹了關(guān)于JavaScript如何正確的寫代碼注釋的相關(guān)資料,注釋的作用是提高代碼的可讀性,幫助自己和別人閱讀和理解你所編寫的JavaScript代碼,注釋的內(nèi)容不會在網(wǎng)頁中顯示,需要的朋友可以參考下
    2023-10-10
  • 淺析JavaScript中變量提升的原理與使用

    淺析JavaScript中變量提升的原理與使用

    前端的小伙伴大概都知道,js中的var變量存在變量提升,在es6以后隨著let變量的出現(xiàn),變量提升問題得以解決,那么變量提升的原理是什么,es6又是怎么解決變量提升問題的,下面我們來共同探尋答案
    2023-05-05
  • js學(xué)習(xí)階段總結(jié)(必看篇)

    js學(xué)習(xí)階段總結(jié)(必看篇)

    下面小編就為大家?guī)硪黄猨s學(xué)習(xí)階段總結(jié)(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • js中如何完美的解析數(shù)據(jù)

    js中如何完美的解析數(shù)據(jù)

    這篇文章給大家分享了JS中完美解析數(shù)據(jù)的方法和技巧,對此有興趣的朋友可以參考學(xué)習(xí)下。
    2018-03-03
  • JavaScript中的繼承方式詳解

    JavaScript中的繼承方式詳解

    這篇文章主要介紹了JavaScript中的繼承方式詳解,本文講解了js繼承的概念、原型式繼承與類式繼承、原型鏈繼承、類式繼承、組合繼承、原型式繼承等內(nèi)容,需要的朋友可以參考下
    2015-02-02
  • 微信小程序用canvas畫圖并分享

    微信小程序用canvas畫圖并分享

    這篇文章主要為大家詳細介紹了微信小程序用canvas畫圖,并實現(xiàn)分享功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 獲取中文字符串的實際長度代碼

    獲取中文字符串的實際長度代碼

    某些情況下我們需要獲取中文字符串的實際長度,下面有個示例,大家可以參考下
    2014-06-06

最新評論