ప్రోటోటైప్ కాలుష్య దాడి జావాస్క్రిప్ట్ వస్తువులు వాటి సంబంధిత ప్రోటోటైప్లతో వ్యవహరించే విధానాన్ని ఉపయోగించుకుంటుంది. జావాస్క్రిప్ట్లో, ఎంచుకున్న వస్తువు కోసం డిఫాల్ట్ లక్షణాలు మరియు పద్ధతులను నిర్వచించే మరొక వస్తువు ప్రోటోటైప్లు. దాడి చేసే వ్యక్తి ఈ ప్రోటోటైప్లలో హానికరమైన కోడ్ను ఇంజెక్ట్ చేయడం ద్వారా వస్తువు యొక్క లక్షణాలను మార్చడం ద్వారా లేదా వస్తువులను పునరావృతంగా విలీనం చేసే ఫంక్షన్ని ఉపయోగించడం ద్వారా ప్రోటోటైప్ కాలుష్యాన్ని ఉపయోగించుకుంటాడు.
ఈ గైడ్ ప్రోటోటైప్ కాలుష్య దాడులను నిరోధించే మార్గాలను వివరిస్తుంది.
ప్రోటోటైప్ కాలుష్య దాడులను నిరోధించాలా?
ప్రోటోటైప్ కాలుష్య దాడులకు మూల కారణం ఏమిటంటే, జావాస్క్రిప్ట్ వస్తువులు వాటి ప్రోటోటైప్ నుండి లక్షణాలను వారసత్వంగా పొందుతాయి. దాడి చేసే వ్యక్తి ప్రోటోటైప్లోకి హానికరమైన కోడ్ను ఇంజెక్ట్ చేయగలిగితే, అది ఆ ప్రోటోటైప్ నుండి వారసత్వంగా పొందిన అన్ని వస్తువుల ద్వారా వారసత్వంగా పొందబడుతుంది. ఇది డేటాను దొంగిలించడానికి, ఏకపక్ష కోడ్ని అమలు చేయడానికి లేదా ఇతర అప్లికేషన్లను నియంత్రించడానికి దారితీస్తుంది.
దిగువ కోడ్ స్నిప్పెట్లో, ప్రోటోటైప్ కాలుష్య కోడ్ ఇంజెక్ట్ చేయబడుతుంది:
const y = { a: 1 , బి: 2 } ;
const data = JSON.parse ( '{'__proto__': { 'faulty': true}}' ) ;
const c = Object.assign ( { } , మరియు, డేటా ) ;
console.log ( c.తప్పు ) ;
పై కోడ్ స్నిప్పెట్ యొక్క వివరణ:
-
- మొదట, జాబితా పేరు ' మరియు ” సృష్టించబడింది మరియు ఇది కీ-విలువ జతలో విలువలను నిల్వ చేస్తుంది.
- సహాయంతో ' -అందుకే- ”, యాదృచ్ఛిక కాలుష్య కోడ్ కీ-విలువ ఆకృతిలో అమలు చేయబడుతుంది. కీ సెట్ చేయబడింది ' దోషపూరితమైన ” మరియు కేటాయించిన విలువ “ నిజం ”.
- అప్పుడు, ఈ కలుషితమైన కోడ్ “కి కేటాయించబడుతుంది మరియు 'ఆవాహన చేయడం ద్వారా జాబితా' కేటాయించవచ్చు() 'పద్ధతి, మరియు ఫలిత జాబితా ' పేరుతో కొత్త జాబితాలో నిల్వ చేయబడుతుంది సి ”.
- చివరగా, ఇంజెక్ట్ చేయబడిన కలుషితమైన కోడ్ “ సి ” జాబితా తిరిగి పొందబడింది మరియు దాని విలువ కన్సోల్పై ప్రదర్శించబడుతుంది. కాలుష్యం లేదా హానికరమైన డేటా ఇంజెక్ట్ చేయబడిందని నిర్ధారించుకోవడానికి.
కలిగి ఉన్న ఫైల్ని అమలు చేసిన తర్వాత, హానికరమైన కోడ్ విజయవంతంగా ఇంజెక్ట్ చేయబడిందని మరియు దాని విలువ తిరిగి పొందబడిందని అవుట్పుట్ చూపిస్తుంది:
ప్రోటోటైప్ కాలుష్య దాడులను ఎలా నిరోధించాలి?
ప్రోటోటైప్ కాలుష్య దాడిని నిరోధించడానికి అనేక విధానాలు ఉన్నాయి:
అసురక్షిత పునరావృత విలీనాలు:
అసురక్షిత పునరావృత విలీనాలను నివారించండి ఎందుకంటే అవి ప్రోటోటైప్ కాలుష్య దాడులకు దారి తీయవచ్చు:
ఎక్కడ విలీనం = ( తీసుకుంటాడు , src ) = > {కోసం ( var లక్షణాలు లో src ) {
ఉంటే ( రకం ( తీసుకుంటాడు [ గుణాలు ] ) === 'obj' && రకం ( src [ గుణాలు ] ) === 'obj' )
{
విలీనం ( తీసుకుంటాడు [ గుణాలు ] , src [ గుణాలు ] ) ;
} లేకపోతే {
తీసుకుంటాడు [ గుణాలు ] = src [ గుణాలు ] ;
}
}
తిరిగి తీసుకుంటాడు ;
} ;
పై కోడ్లో:
-
- మొదట, కస్టమ్ ఫంక్షన్ ' విలీనం() 'రెండు అర్రే పారామితులను అంగీకరించే విధంగా సృష్టించబడింది' తీసుకుంటాడు 'మరియు' src ”.
- మెరుగుపరచబడిన ' కోసం వేరియబుల్ని పునరావృతం చేయడానికి లూప్ ఉపయోగించబడుతుంది గుణాలు 'అందించిన దానికంటే' src ”పరామితి.
- లూప్ లోపల, ఒక 'ని ఉపయోగించండి ఉంటే ” ప్రకటన రెండు లోపాల ద్వారా నావిగేట్ చేస్తుంది మరియు రెండు శ్రేణులలో ఉన్న ఏదైనా మూలకం ఒకే రకమైన డేటాను కలిగి ఉంటే. అప్పుడు ఆ మూలకాలు పారామితులుగా అదే ' విలీనం() ” ఫంక్షన్ పునరావృత స్వభావాన్ని సృష్టిస్తుంది.
- రకాలు ఒకేలా లేకుంటే, ''లో ఉండే మూలకం విలువ src 'పరామితి శ్రేణి'కి పంపబడింది తీసుకుంటాడు ”పరామితి.
- చివరగా, ' తీసుకుంటాడు ” పారామెట్రిక్ అర్రే తిరిగి వస్తుంది.
ప్రోటోటైప్ను గడ్డకట్టడం
ప్రోటోటైప్ కాలుష్య దాడులకు మరొక నివారణ వాటి అమలు చక్రాన్ని స్తంభింపజేయడం. ఇది '' ద్వారా చేయబడుతుంది Object.freeze() ” పద్ధతి. దిగువ స్నిప్పెట్లో, పైన ఇంజెక్ట్ చేయబడిన ప్రోటోటైప్డ్ పొల్యూటెడ్ కోడ్ స్తంభింపజేయబడుతుంది:
const y = { a: 1 , బి: 2 } ;const data = JSON.parse ( '{'__proto__': { 'faulty': true}}' ) ;
const c = Object.assign ( { } , మరియు, డేటా ) ;
console.log ( c.తప్పు ) ;
console.log ( ఆబ్జెక్ట్.ఫ్రీజ్ ( c.తప్పు ) ) ;
console.log ( Object.isFrozen ( c.తప్పు ) ) ;
పై కోడ్ యొక్క వివరణ క్రింద చూపబడింది:
-
- మొదట్లో, డమ్మీ ప్రోటోటైప్ పొల్యూటెడ్ కోడ్ డమ్మీ లిస్ట్లోకి ఇంజెక్ట్ చేయబడుతుంది ' మరియు ” పై విభాగంలో వివరించినట్లుగానే.
- అప్పుడు, ఇంజెక్ట్ చేయబడిన కలుషితమైన కీ ' దోషపూరితమైన ''కి పంపబడుతుంది ఫ్రీజ్() కలుషితమైన భాగాన్ని స్తంభింపజేసే పద్ధతి.
- చివరగా, స్తంభింపచేసిన ప్రోటోటైప్ కాలుష్య భాగాన్ని నిర్ధారించడానికి. ది ' దోషపూరితమైన 'జాబితా కీ' సి ''కి పంపబడుతుంది ఘనీభవించిన () ” పద్ధతి. ఈ పద్ధతి తిరిగి వస్తుంది ' నిజం 'స్తంభింపచేసిన సందర్భంలో మరియు' తప్పుడు 'స్తంభింపజేయని సందర్భంలో:
కలిగి ఉన్న కోడ్ని అమలు చేసిన తర్వాత, స్తంభింపచేసిన కలుషిత కోడ్ యొక్క ఇంజెక్షన్, ఫ్రీజింగ్ మరియు ధృవీకరణను అవుట్పుట్ చూపిస్తుంది:
ప్రోటోటైప్ కాలుష్య దాడిని నిరోధించడానికి అదనపు చిట్కాలు
ప్రోటోటైప్ కాలుష్య దాడిని నిరోధించడం ద్వారా కొన్ని అదనపు చిట్కాలు క్రింద పేర్కొనబడ్డాయి:
-
- ఎంపిక ' -డిసేబుల్-ప్రోటో '' పనిని నిలిపివేయడానికి లేదా చంపడానికి ఉపయోగించవచ్చు నమూనా.__ప్రోటో__ ”ఆస్తి.
- '' సహాయంతో పద్ధతులను ఉపయోగించవద్దు నమూనా ”.
- ద్వారా ' వినియోగదారు ఇన్పుట్ను శుభ్రపరచడం ” ఏదైనా హానికరమైన లేదా కలుషితమైన కోడ్ను తీసివేయడానికి వినియోగదారు ఇన్పుట్ని ధృవీకరించడం మరియు ఫిల్టర్ చేయడం వంటివి ఉంటాయి.
- ఉపయోగం ' వైట్లిస్ట్ ”, ఇది ఒక వస్తువు కోసం అనుమతించబడిన లక్షణాలు మరియు పద్ధతుల జాబితా. వైట్లిస్ట్లో సభ్యులుగా లేని ప్రాపర్టీలు లేదా పద్ధతులను సెట్ చేయడానికి లేదా పొందడానికి ఏవైనా ప్రయత్నాలు బ్లాక్ చేయబడతాయి.
Node.jsలో ప్రోటోటైప్ కాలుష్య దాడుల నివారణ గురించి అంతే.
ముగింపు
ప్రోటోటైప్ కాలుష్య దాడులను నివారించడానికి, అసురక్షిత పునరావృత విలీనాలను నివారించడం, ప్రోటోటైప్ను స్తంభింపజేయడం మరియు వైట్లిస్ట్ని ఉపయోగించడం వంటి విధానాలను నిరోధించడానికి “ __అందుకే__ ”సెట్ నుండి ఆస్తిని ఉపయోగించవచ్చు. వినియోగంతో పాటు ' -డిసేబుల్-ప్రోటో ' ఎంపికలు, ' ఉపయోగాన్ని నివారించడం వస్తువు.ప్రోటోటైప్ ', మరియు' వినియోగదారు ఇన్పుట్ను శుభ్రపరచడం కలుషితమైన కోడ్ కోసం. ఈ గైడ్ Nodejsలో ప్రోటోటైప్ కాలుష్య దాడుల నివారణను వివరించింది.