MySQL എങ്ങനെയാണ് sql കുത്തിവയ്പ്പ് തടയുന്നത്? SQL കുത്തിവയ്പ്പ് തത്വവും പ്രതിരോധവും

MySQLsql കുത്തിവയ്പ്പ് എങ്ങനെ തടയാം? SQL കുത്തിവയ്പ്പ് തത്വവും പ്രതിരോധവും

MySQL കൂടാതെ SQL കുത്തിവയ്പ്പും

നിങ്ങൾ ഒരു വെബ് പേജിലൂടെ ഉപയോക്താവ് നൽകിയ ഡാറ്റ എടുത്ത് എയിലേക്ക് തിരുകുകയാണെങ്കിൽMySQL ഡാറ്റാബേസ്, അപ്പോൾ 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-ലേക്ക് ചേർത്തിരിക്കുന്നു, ഇത് ഉപയോക്തൃ പട്ടികയിലെ എല്ലാ ഡാറ്റയും ഇല്ലാതാക്കും.

ഒന്നിലധികം SQL പ്രസ്താവനകൾ എക്സിക്യൂട്ട് ചെയ്യാൻ PHP-യിലെ mysqli_query() ന് അനുവാദമില്ല, എന്നാൽ SQLite, PostgreSQL എന്നിവയ്ക്ക് ഒരേ സമയം ഒന്നിലധികം SQL സ്റ്റേറ്റ്‌മെന്റുകൾ എക്സിക്യൂട്ട് ചെയ്യാൻ കഴിയും, അതിനാൽ ഈ ഉപയോക്താക്കളുടെ ഡാറ്റ ഞങ്ങൾ കർശനമായി പരിശോധിക്കേണ്ടതുണ്ട്.

SQL കുത്തിവയ്പ്പ് തടയുന്നതിന്, ഇനിപ്പറയുന്ന പോയിന്റുകൾ ഞങ്ങൾ ശ്രദ്ധിക്കേണ്ടതുണ്ട്:

  • 1. ഉപയോക്തൃ ഇൻപുട്ടിനെ ഒരിക്കലും വിശ്വസിക്കരുത്.ഉപയോക്താവിന്റെ ഇൻപുട്ട് പരിശോധിക്കുക, നിങ്ങൾക്ക് സാധാരണ എക്സ്പ്രഷനുകൾ ഉപയോഗിക്കാം, അല്ലെങ്കിൽ ദൈർഘ്യം പരിമിതപ്പെടുത്താം; ഒറ്റ ഉദ്ധരണികളും ഇരട്ട "-" മുതലായവയും പരിവർത്തനം ചെയ്യുക.
  • 2. ഡൈനാമിക് അസംബ്ലി sql ഒരിക്കലും ഉപയോഗിക്കരുത്, നിങ്ങൾക്ക് പാരാമീറ്ററൈസ്ഡ് sql ഉപയോഗിക്കാം അല്ലെങ്കിൽ ഡാറ്റാ അന്വേഷണത്തിനും ആക്‌സസിനും നേരിട്ട് സംഭരിച്ച നടപടിക്രമങ്ങൾ ഉപയോഗിക്കാം.
  • 3. അഡ്മിനിസ്ട്രേറ്റർ പ്രത്യേകാവകാശങ്ങളുള്ള ഡാറ്റാബേസ് കണക്ഷനുകൾ ഒരിക്കലും ഉപയോഗിക്കരുത്, ഓരോ ആപ്ലിക്കേഷനും പരിമിതമായ പ്രത്യേകാവകാശങ്ങളുള്ള പ്രത്യേക ഡാറ്റാബേസ് കണക്ഷനുകൾ ഉപയോഗിക്കുക.
  • 4. രഹസ്യസ്വഭാവമുള്ള വിവരങ്ങൾ നേരിട്ട് സംഭരിക്കരുത്, പാസ്‌വേഡുകളും സെൻസിറ്റീവ് വിവരങ്ങളും എൻക്രിപ്റ്റ് ചെയ്യുകയോ ഹാഷ് ഔട്ട് ചെയ്യുകയോ ചെയ്യരുത്.
  • 5. ആപ്ലിക്കേഷന്റെ ഒഴിവാക്കൽ വിവരങ്ങൾ കഴിയുന്നത്ര കുറച്ച് സൂചനകൾ നൽകണം, കൂടാതെ യഥാർത്ഥ പിശക് വിവരങ്ങൾ പൊതിയാൻ ഇഷ്‌ടാനുസൃത പിശക് വിവരങ്ങൾ ഉപയോഗിക്കുന്നതാണ് നല്ലത്
  • 6. sql കുത്തിവയ്പ്പിന്റെ കണ്ടെത്തൽ രീതി സാധാരണയായി സഹായകമാണ്സോഫ്റ്റ്വെയർഅല്ലെങ്കിൽ കണ്ടെത്താനുള്ള വെബ്‌സൈറ്റ് പ്ലാറ്റ്‌ഫോം, സോഫ്റ്റ്‌വെയർ സാധാരണയായി sql ഇഞ്ചക്ഷൻ ഡിറ്റക്ഷൻ ടൂൾ jsky ഉപയോഗിക്കുന്നു, വെബ്‌സൈറ്റ് പ്ലാറ്റ്‌ഫോമിൽ Yisi വെബ്‌സൈറ്റ് സെക്യൂരിറ്റി പ്ലാറ്റ്‌ഫോം ഡിറ്റക്ഷൻ ടൂൾ ഉണ്ട്. MDCSOFT സ്കാൻ et al.MDCSOFT-IPS ഉപയോഗിക്കുന്നത് SQL കുത്തിവയ്പ്പ്, XSS ആക്രമണങ്ങൾ മുതലായവയിൽ നിന്ന് ഫലപ്രദമായി പ്രതിരോധിക്കും.

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

ഏറ്റവും പുതിയ അപ്‌ഡേറ്റുകൾ ലഭിക്കുന്നതിന് ചെൻ വെയ്‌ലിയാങ്ങിന്റെ ബ്ലോഗിന്റെ ടെലിഗ്രാം ചാനലിലേക്ക് സ്വാഗതം!

🔔 ചാനൽ ടോപ്പ് ഡയറക്‌ടറിയിൽ വിലയേറിയ "ChatGPT കണ്ടന്റ് മാർക്കറ്റിംഗ് AI ടൂൾ ഉപയോഗ ഗൈഡ്" നേടുന്ന ആദ്യത്തെയാളാകൂ! 🌟
📚 ഈ ഗൈഡിൽ വലിയ മൂല്യമുണ്ട്, 🌟 ഇതൊരു അപൂർവ അവസരമാണ്, ഇത് നഷ്‌ടപ്പെടുത്തരുത്! ⏰⌛💨
ഇഷ്ടമായാൽ ഷെയർ ചെയ്യുക, ലൈക്ക് ചെയ്യുക!
നിങ്ങളുടെ ഷെയറിംഗും ലൈക്കുകളുമാണ് ഞങ്ങളുടെ തുടർച്ചയായ പ്രചോദനം!

 

发表 评论

നിങ്ങളുടെ ഇമെയിൽ വിലാസം പ്രസിദ്ധീകരിക്കില്ല. ആവശ്യമായ ഫീൽഡുകൾ ഉപയോഗിക്കുന്നു * ലേബൽ

മുകളിലേക്ക് സ്ക്രോൾ ചെയ്യുക