最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)限是允許”,這就給了不懷好意的壞人,一個可乘之機(jī)。

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

為什么會不安全呢?

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

假設(shè)黑客知道你的代碼在運(yùn)行時會創(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在代碼運(yùn)行時被創(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)文章

最新評論

高要市| 元谋县| 呼玛县| 鹿泉市| 当阳市| 崇明县| 高密市| 贵定县| 衡水市| 信丰县| 洪江市| 余庆县| 天气| 马鞍山市| 新和县| 塔河县| 苏尼特左旗| 博野县| 广平县| 营口市| 邳州市| 襄垣县| 巨鹿县| 西藏| 扶余县| 乡城县| 东安县| 永定县| 双辽市| 格尔木市| 米泉市| 陈巴尔虎旗| 南昌县| 临清市| 怀宁县| 汽车| 津市市| 辽中县| 黎平县| 黑河市| 昌宁县|