Како MySQL спречува инјектирање SQL? Принцип и превенција на инјектирање SQL

MySQL,Како да се спречи инјектирање SQL? Принцип и превенција на инјектирање SQL

MySQL, и SQL инјектирање

Ако ги земете податоците внесени од корисникот преку веб-страница и ги вметнете во aMySQL база на податоци, тогаш може да има безбедносни проблеми со инјектирање 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, што ќе ги избрише сите податоци во табелата за корисници.

mysqli_query() во PHP не смее да извршува повеќе SQL изјави, но SQLite и PostgreSQL можат да извршуваат повеќе SQL изјави истовремено, затоа треба строго да ги потврдиме податоците на овие корисници.

За да спречиме инјектирање SQL, треба да обрнеме внимание на следниве точки:

  • 1. Никогаш не верувајте во внесувањето на корисникот.Проверете го внесувањето на корисникот, можете да користите регуларни изрази или да ја ограничите должината; да конвертирате единечни наводници и двојно „-“ итн.
  • 2. Никогаш не користете динамично склопување sql, можете да користите параметриизирано sql или директно да користите складирани процедури за барање податоци и пристап.
  • 3. Никогаш не користете врски со базата на податоци со администраторски привилегии, користете посебни врски со бази на податоци со ограничени привилегии за секоја апликација.
  • 4. Не чувајте доверливи информации директно, шифрирајте или хаширајте лозинки и чувствителни информации.
  • 5. Информациите за исклучок на апликацијата треба да даваат што е можно помалку совети, а најдобро е да се користат сопствени информации за грешка за да се заокружат оригиналните информации за грешката
  • 6. Методот за откривање на SQL инјектирање генерално прифаќа помошниПакетиИли веб-страницата за откривање, софтверот генерално ја користи алатката за откривање на инјектирање SQL jsky, платформата на веб-страницата има алатка за откривање на безбедносна платформа за веб-страница Yisi. MDCSOFT SCAN и сор.Користењето на MDCSOFT-IPS може ефикасно да се одбрани од инјектирање SQL, напади на XSS итн.

Спречете го SQL Injection

Во јазиците за скриптирање, како што се Perl и PHP, можете да избегате од податоците внесени од корисникот за да спречите инјектирање SQL.

Наставката MySQL за PHP ја обезбедува функцијата 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().

Блог на Hope Chen Weiliang ( https://www.chenweiliang.com/ ) сподели „Како MySQL го спречува инјектирањето на SQL? Принцип на инјектирање sql и превенција“, ќе ви помогне.

Добредојдовте да ја споделите врската од оваа статија:https://www.chenweiliang.com/cwl-500.html

За да отклучите повеќе скриени трикови🔑, добредојдени сте да се придружите на нашиот Телеграм канал!

Споделете и лајкнете ако ви се допаѓа! Вашите споделувања и лајкови се наша постојана мотивација!

 

评论

Вашата адреса за е-пошта нема да биде објавена. Се користат задолжителните полиња * Етикета

Дојдете до врв