Смарт защита от SQL-инжекция - стек преливане на Руски

Аз отдавна са измъчван от въпроса: Как да защитите вашия сайт от тип SQL Injection. В старите дни аз бях mysql_real string_escape за скрининг кавички. Но това отне известно време, а аз научих за ЗНП. Той казва, казват те, тази тема е добра помощ за защита на сайта. Да кажем, че аз не съм голям хакер, и то не може да се провери, аз знам, че когато mysql_real string_escape всички цитати и неща проверяват - и готово, вие сте в къщата.

Аз съм в момента работи по проекта си и реши да провери на сайта, за да се защитят проникването. Като резултат от това, което направих:

Аз просто взех и въвеждат данните в кавички, например, Infor`mat'ion. Както вече казах, аз не съм голям хакер, но знам, че всичко това боклук трябва да се изследват, но тя е влязла в база данни, която ми даде идеята, че аз нямам защита, всъщност, не. И аз записва данните, които са по следния начин:

Този метод Четох Хабре в "Защо трябва да използваме PDO за работа с базата данни." Връзката е същата, както е посочено в статията.

Как можете да се предпазите от тези инжекции?

настроен 22 януари '15 в 18:57

Изводът, което сте направили погрешно, и ще съди всички проблеми. но знам, че всичко това боклук трябва да се изследват, но тя е влязла в база данни. Това нещо ekranilovalas, че тя се записва в базата данни по начин, който няма ефект върху изпълнението на искането, включително, без да се променя поведението си, като по този начин protisoyav SQL инжекция. Т.е. скрининг свършила работата, точно това, което влезе на потребителя в базата данни има. Сега, ако искането Vashj отрязаха, че би било много лошо за което позволява вмъкване на текста на парчето на SQL, изпълни го. - Vitalts 21 Декември '15 в 07:44

Ако използвате готови отчети (изготвен отчет) параметри с външен произход се изпраща на сървъра отделно от искането или автоматично защитени от клиента библиотека.

Създайте таблица drop_table. още

Таблица drop_table изтрит успешно. )

Сега една и съща заявка, но само чрез подготвени изявление:

В таблицата за изпитване, добавете запис Evil "); DROP TABLE drop_table; -

По този начин, ние трябва да се предпазите от SQL инжекция. но без защита от XSS.

В последния случай е необходимо:

Ако по някаква причина искате да съхранявате в HTML кода на базата данни от източник, който не е достоверен, че е възможно да се използват HTML Purifier.

Точно така: в таблицата, и следва да се добави към линията «Infor`mat'ion». Скринингът трябва да се проведе точно в момента на заявката, вместо да се съхраняват в тази форма. И ЗНП добре се справят с него. И mysql_real_escape_string (и mysqli_real_escape_string) - също. И дори str_replace - това е и начин да се предпазят (Виж UPD.) Така че ново, което ни дава ЗНП, така че това е проследяване на видовете данни, предавани и разграничението между действие и данни .. Популярни грешка, която доведе до слабите резултати, е фактът, че някои хора забравят да се провери вида на не-низ:

Или просто винаги обработва входните данни след цитата, от възможността за представянето на брой представителства булев -data. Или просто сложи крайния обвивка, например, на ЗНП. )

mysqli_real_escape_string (най-вероятно), mysql_real_escape_string. и още по-str_replace - несигурен (\ xbf \ X27 и други проблеми), като се използва MySQL заявки само в настоящия обучени режим! ЗНП трябва да се използват правилно (благодарение @romeo за връзката).

@romeo, благодаря ви за четене, аз просто Наскоро попаднах на грешка, която е резултат от подражание и не можеше да разбере какво се случва: $ stmt = $ pdo-> подготви ( "SELECT user_id от потребителите LIMIT: граница"); $ Stmt-> bindValue ( "граница", 10); $ Stmt-> изпълнение (); / *. справка в ръководството, който съответства на вашия сървър версия на MySQL за правилния синтаксис за използване в близост до '' 10 '' * / Предположих за вида (вземане на ORM, така че моята система е разрешено): $ stmt-> bindValue ( "граница" 10, PDO :: PARAM_INT); Но сега знам, че основната причина за проблема, благодаря ви. - Bars 24 '15 януари в 15:18