Как да предотвратите PHP, SQL и XSS инжекции (сигурност) (PHP Hypertext Preprocessor), член 236

Разбира се, не съм супер професионалист по сигурността, но имам известни познания в областта на сигурността на php скриптове. И така, общи пропуски в php скриптовете: - PHP инжекция. - SQL инжекция. -XSS. Това е относно борбата срещу тези уязвимости и ще бъде обсъдено. Разбира се, има много статии за сигурността, но все пак ще дам своя принос.

Какво е PHP инжектиране? PHP инжектиране е начин за хакване на сайт чрез изпълнение на PHP код на трета страна на сайта. Например, искате да включите необходимия файл, в зависимост от параметъра, който идва от GET:

Ако въведете следния URL адрес: http://yoursite/your_file.php?action=http://cracker_site/file, тогава ако директиватаallow_url_include е активирана във файла php.ini на вашия сървър, атакуващият може да вмъкне кода, който иска да изпълни на вашия сайт във файла, към който е посочил връзката и кодът ще бъде успешно изпълнен на вашия сайт. Вашият сайт е хакнат.

Как да процедираме? Можете да проверите съществуването на файл на сървъра с помощта на функциятаfile_exists() - за файлове на сървър на трета страна (http://crack_site/file), тя ще върне FALSE.

Вече добре. Изпълнението на PHP код от отдалечен сървър на вашия сайт ще се провали. Но, например, потребителите имат възможността да качват своите файлове на вашия сайт. Нападателят може да създаде PHP код и да наименува файла с кода "my photo.jpeg" и, ако файлът не се обработва правилно, атакуващият може да направи това: http://your_site/your_file.php?action=/папка с изображения/неговото изображение/ и горният php код, който включва файлове в зависимост от параметъра, ще го изпълни, т.е. кодът, който е в "изображението", ще работи успешно. Значи вашият сайт е бил успешно хакнат. Как да бъдем? - Трябва да проверите типа на файла с функцииработа с изображения, например getimagesize (https://www.php.net/ . etimagesize.php) ще върне типа на изображението в допълнение към размера. Така че можете да проверите дали идва правилният тип изображение и да направите подходящите заключения.

SQL инжектиране SQL инжектиране - хакване на базата данни на сайта чрез добавяне на заявка към сървъра със собствена, хакерска. Може да се осъществи, ако данните, идващи от потребителя (от формата на сайта) се вмъкнат в SQL заявката към базата данни без предварителна обработка. Например, вие използвате следната SQL заявка, за да проверите потребителско име и парола:

Тогава всички специални символи (и по-специално единичните кавички) ще бъдат екранирани (т.е. пред тях ще се добави наклонена черта \) и в заявката хакерският код ще изглежда като обикновен низ и няма да повреди вашата база данни. Ако вашата база данни не е MySQL или PostgreSQL (използвайтеpg_escape_string() за нея (https://php.net/manu . cape-string.php), тогава трябва да използвате функциятаaddslashes() (https://php.net/manual/en/function.addslashes.php). Ако базата данни е MySQL или PostgreSQL, използвайте специални функции за вашата база данни (информацията по-горе).

Често има такива обработки:

Няма смисъл от такава конструкция. Прочетете документацията, ако не знаете защо.

XSS инжектиране XSS е инжектирането на клиентски код (JS, HTML например, т.е. тези, използвани в браузъра) във вашия сайт. Например, имате формуляр в книгата за гости, нападателят, като въведе HTML или JS код в него, при условие че няма проверки на вашия сайт, ще може да обработи своя код в браузъра на друг посетител. Можете да крадете БИСКВИТКИ, да изтегляте вируси на компютъра на потребителя. Изход: не забравяйте да конвертирате данните, преди да ги изведете в браузъра с помощта наhtmlspecialchars() (https://secure.php.n . pecialchars.php) илиhtmlententies() (https://www.php.net/ . tmlentities.php), първият преобразува html специални символи в техните обекти, а вторият преобразува ВСИЧКИ ВЪЗМОЖНИ знаци в html обекти. По-добре е да обработите кода, преди да бъде изведен в браузъра, а не когато пишете в базата данни (счита се за добра форма). Така че, ако нападател въведе този (прост пример) код във формуляра:

тогава ще се показва като обикновен текст и няма да таксува безкрайно излъчване на съобщения (ще бъде особено хубаво в IE, в други браузъри е възможно да деактивирате JS с чести ALERT).

И накрая, няколко думи:

  • Не лъсвайте пароли от FTP, SSH, администраторския раздел на вашия сайт.
  • Сменяйте ги за надеждност поне веднъж на всяко тримесечие на годината.
  • Прегледайте кода си за "дупки" в сигурността, предпочитате да намерите дупка, отколкото нападател.
  • На работния сайт изключете показването на грешки, така че атакуващият няма да вижда пътищата и имената на файловете и разбира се самите грешки, от които може да направи свои изводи.
Благодаря ви за вниманието!