ఆర్టికల్ డైరెక్టరీ
MySQLSQL ఇంజెక్షన్ను ఎలా నిరోధించాలి? SQL ఇంజెక్షన్ సూత్రం మరియు నివారణ
MySQL మరియు SQL ఇంజెక్షన్
మీరు వెబ్పేజీ ద్వారా వినియోగదారు నమోదు చేసిన డేటాను తీసుకుని, దాన్ని a లోకి చొప్పించినట్లయితేMySQL డేటాబేస్, అప్పుడు SQL ఇంజెక్షన్ భద్రతా సమస్యలు ఉండవచ్చు.
ఈ అధ్యాయం SQL ఇంజెక్షన్ను ఎలా నిరోధించాలో మరియు SQLలో ఇంజెక్ట్ చేయబడిన అక్షరాలను ఫిల్టర్ చేయడానికి స్క్రిప్ట్లను ఎలా ఉపయోగించాలో మీకు పరిచయం చేస్తుంది.
SQL ఇంజెక్షన్ అని పిలవబడేది డొమైన్ పేరు లేదా పేజీ అభ్యర్థన యొక్క ప్రశ్న స్ట్రింగ్ను సమర్పించడానికి లేదా ఇన్పుట్ చేయడానికి వెబ్ ఫారమ్లోకి SQL ఆదేశాలను చొప్పించడం ద్వారా హానికరమైన SQL ఆదేశాలను అమలు చేయడానికి సర్వర్ను మోసగించడం.
మేము వినియోగదారు ఇన్పుట్ను ఎప్పటికీ విశ్వసించకూడదు, వినియోగదారు ఇన్పుట్ డేటా సురక్షితం కాదని మేము భావించాలి మరియు మనమందరం వినియోగదారు ఇన్పుట్ డేటాను ఫిల్టర్ చేయాలి.
కింది ఉదాహరణలో, నమోదు చేయబడిన వినియోగదారు పేరు తప్పనిసరిగా అక్షరాలు, సంఖ్యలు మరియు అండర్స్కోర్ల కలయికగా ఉండాలి మరియు వినియోగదారు పేరు తప్పనిసరిగా 8 మరియు 20 అక్షరాల పొడవు ఉండాలి:
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysqli_query($conn, "SELECT * FROM users WHERE username=$matches[0]"); } else { echo "username 输入异常"; }
ప్రత్యేక అక్షరాలు ఫిల్టర్ చేయనప్పుడు సంభవించే SQL పరిస్థితిని పరిశీలిద్దాం:
// 设定$name 中插入了我们不需要的SQL语句 $name = "Qadir'; DELETE FROM users;"; mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
పై ఇంజెక్షన్ స్టేట్మెంట్లో, మేము $name యొక్క వేరియబుల్ని ఫిల్టర్ చేయలేదు. మనకు అవసరం లేని SQL స్టేట్మెంట్ $nameలో చొప్పించబడింది, ఇది వినియోగదారుల పట్టికలోని మొత్తం డేటాను తొలగిస్తుంది.
PHPలోని mysqli_query() బహుళ SQL స్టేట్మెంట్లను అమలు చేయడానికి అనుమతించబడదు, అయితే SQLite మరియు PostgreSQL ఒకే సమయంలో బహుళ SQL స్టేట్మెంట్లను అమలు చేయగలవు, కాబట్టి మేము ఈ వినియోగదారుల డేటాను ఖచ్చితంగా ధృవీకరించాలి.
SQL ఇంజెక్షన్ నిరోధించడానికి, మేము ఈ క్రింది అంశాలకు శ్రద్ధ వహించాలి:
- 1. వినియోగదారు ఇన్పుట్ను ఎప్పుడూ విశ్వసించవద్దు.వినియోగదారు ఇన్పుట్ను తనిఖీ చేయండి, మీరు సాధారణ వ్యక్తీకరణలను ఉపయోగించవచ్చు లేదా పొడవును పరిమితం చేయవచ్చు; సింగిల్ కోట్లను మరియు డబుల్ "-" మొదలైన వాటిని మార్చండి.
- 2. డైనమిక్ అసెంబ్లీ sqlని ఎప్పుడూ ఉపయోగించవద్దు, మీరు పారామీటర్ చేయబడిన sqlని ఉపయోగించవచ్చు లేదా డేటా ప్రశ్న మరియు యాక్సెస్ కోసం నేరుగా నిల్వ చేసిన విధానాలను ఉపయోగించవచ్చు.
- 3. అడ్మినిస్ట్రేటర్ అధికారాలతో డేటాబేస్ కనెక్షన్లను ఎప్పుడూ ఉపయోగించవద్దు, ప్రతి అప్లికేషన్ కోసం పరిమిత అధికారాలతో ప్రత్యేక డేటాబేస్ కనెక్షన్లను ఉపయోగించండి.
- 4. రహస్య సమాచారాన్ని నేరుగా నిల్వ చేయవద్దు, పాస్వర్డ్లు మరియు సున్నితమైన సమాచారాన్ని ఎన్క్రిప్ట్ చేయవద్దు లేదా హ్యాష్ అవుట్ చేయవద్దు.
- 5. అప్లికేషన్ యొక్క మినహాయింపు సమాచారం వీలైనంత తక్కువ సూచనలను అందించాలి మరియు అసలు ఎర్రర్ సమాచారాన్ని వ్రాప్ చేయడానికి అనుకూల ఎర్రర్ సమాచారాన్ని ఉపయోగించడం ఉత్తమం
- 6. Sql ఇంజెక్షన్ యొక్క గుర్తింపు పద్ధతి సాధారణంగా సహాయకాన్ని అవలంబిస్తుందిసాఫ్ట్వేర్లేదా గుర్తించడానికి వెబ్సైట్ ప్లాట్ఫారమ్, సాఫ్ట్వేర్ సాధారణంగా sql ఇంజెక్షన్ డిటెక్షన్ టూల్ jskyని ఉపయోగిస్తుంది, వెబ్సైట్ ప్లాట్ఫారమ్లో Yisi వెబ్సైట్ సెక్యూరిటీ ప్లాట్ఫారమ్ డిటెక్షన్ టూల్ ఉంటుంది. MDCSOFT స్కాన్ మరియు ఇతరులు.MDCSOFT-IPSని ఉపయోగించడం SQL ఇంజెక్షన్, XSS దాడులు మొదలైన వాటి నుండి సమర్థవంతంగా రక్షించబడుతుంది.
SQL ఇంజెక్షన్ను నిరోధించండి
పెర్ల్ మరియు PHP వంటి స్క్రిప్టింగ్ భాషలలో మీరు SQL ఇంజెక్షన్ను నిరోధించడానికి వినియోగదారు నమోదు చేసిన డేటా నుండి తప్పించుకోవచ్చు.
PHP కోసం MySQL పొడిగింపు ప్రత్యేక ఇన్పుట్ అక్షరాల నుండి తప్పించుకోవడానికి mysqli_real_escape_string() ఫంక్షన్ను అందిస్తుంది.
if (get_magic_quotes_gpc()) { $name = stripslashes($name); } $name = mysqli_real_escape_string($conn, $name); mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
లైక్ స్టేట్మెంట్లలో ఇంజెక్షన్
ఇలా ప్రశ్నిస్తున్నప్పుడు, వినియోగదారు "_" మరియు "%"తో విలువలను నమోదు చేస్తే, ఇది జరుగుతుంది: వినియోగదారు వాస్తవానికి "abcd_"ని ప్రశ్నించాలనుకున్నారు, కానీ ప్రశ్న ఫలితాలలో "abcd_", "abcde" మరియు "abcdf ఉన్నాయి. " మొదలైనవి; వినియోగదారు "30%"ని ప్రశ్నించాలనుకున్నప్పుడు కూడా సమస్య ఏర్పడుతుంది (గమనిక: ముప్పై శాతం).
PHP స్క్రిప్ట్లో కింది ఉదాహరణలో వలె, పై పరిస్థితిని నిర్వహించడానికి మనం addcslashes() ఫంక్షన్ను ఉపయోగించవచ్చు:
$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_"); // $sub == \%something\_ mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
addcslashes() ఫంక్షన్ పేర్కొన్న అక్షరానికి ముందు బ్యాక్స్లాష్ను జోడిస్తుంది.
సింటాక్స్ ఫార్మాట్:
addcslashes(string,characters)
పరామితి | వివరణ |
---|---|
స్ట్రింగ్ | అవసరం.తనిఖీ చేయడానికి స్ట్రింగ్ను నిర్దేశిస్తుంది. |
అక్షరాలు | ఐచ్ఛికం.addcslashes() ద్వారా ప్రభావితమైన అక్షరాల అక్షరం లేదా పరిధిని పేర్కొంటుంది. |
హోప్ చెన్ వీలియాంగ్ బ్లాగ్ ( https://www.chenweiliang.com/ ) భాగస్వామ్యం చేసిన "MySQL sql ఇంజెక్షన్ను ఎలా నిరోధిస్తుంది? sql ఇంజెక్షన్ సూత్రం మరియు నివారణ", ఇది మీకు సహాయం చేస్తుంది.
ఈ కథనం యొక్క లింక్ను భాగస్వామ్యం చేయడానికి స్వాగతం:https://www.chenweiliang.com/cwl-500.html
తాజా నవీకరణలను పొందడానికి చెన్ వీలియాంగ్ బ్లాగ్ యొక్క టెలిగ్రామ్ ఛానెల్కు స్వాగతం!
📚 ఈ గైడ్లో భారీ విలువ ఉంది, 🌟ఇది ఒక అరుదైన అవకాశం, దీన్ని మిస్ చేయకండి! ⏰⌛💨
నచ్చితే లైక్ చేసి షేర్ చేయండి!
మీ భాగస్వామ్యం మరియు ఇష్టాలు మా నిరంతర ప్రేరణ!