PHP Server-Side PHP привязка, от которой ваш сервер не отправится спать

HellsCoder

Известный
Автор темы
Проверенный
236
239
Вступление
Шалом форумчане, дело было вечером, или утром... Ну так вот. Сегодня расскажу как сделать нормальную привязку на серверной стороне(на клиентской, уж как нибудь сами). Да что там расскажу, покажу!

Какие проблемы есть у новичков в слоне(РНР)
SQL-Injection: инъекции, в 2019. Да. Эта проблема была и остается до сих пор.
XSS: безобидно, но малоприятно
Flood: Это зарыто еще при создании таблицы)
PDO: подтягивать огромную либу для одного файла привязки????
Сегодня мы решим все эти проблемы.

Решение, в теории
Защита от SQL иньекций - здесь совершенно необязательно подтягивать тонны классов которые все равно в конечном итоге инкапсулируют функцию mysqli_query и mysqli_real_escape_stringгораздо разумнее было бы использовать их напрямую
Защитаот XSS - все входящие параметры должны проходить валидацию. Можно банально прогнать все данные черезhtmlspecialchars- это уже даст минимальную защиту от XSS
Защитаот Флуда: тут нужно предпринять целый комплекс мер, какого то определенного решения проблемы нет. Но мы защитим свою привязку и от этого
Заканчивайте использоватьPDO в маленьких проектах: вся тонна классов ПДО это грубо говоря формировании очереди запросов, экранирование, билдер(уродский, который в хуй не впился там), отправка запроса. Я научу использовать в мелких проектах только не ООП функции, это сэкономит нам наши драгоценные миллисекунды

Решение на практике
Итак, защитимся сначала от самого главного.SQL-Инъекций и XSS.В свое время для маленьких проектов я выработал НЕ-ООП функцию, которая полностью фильтрует ввод до безопасных значений, вот она
Код:
function safe($val){
    $val = mysqli_real_escape_string($link, $val); //Защита от SQL
    $val = htmlspecialchars($val); //Защита от XSS
    return $val;
}
Теперь о том, как использовать функцию

Код:
<?php

/*
*Здесь у вас подключение к бд, стандартная хуйня $link = mysqli_connect(........)
*/

$var = $_GET['somevar']; //ВХОДЯЩИЙ ПАРАМЕТР


$secured_var = safe($var); //Безопасная переменная, можно использовать хоть в SQL запросе.



function safe($val){
    global $link;
    $val = mysqli_real_escape_string($link, $val); //Защита от SQL
    $val = htmlspecialchars($val); //Защита от XSS
    return $val;
}
Не вздумайте такое использовать в больших проектах, такой код не очень хорош для них, кстати если кому будет интересно, я разберу код одного из своих крупных проектов. Отпишете в комменты


Флуд. Целый раздел прям)

Начнем с того, как вы создаете таблицу, самый главный аспект здесь - размер полей.
Если вам в бд нужно будет записывать ИД, то выделяем под него 4 байта при создании таблицы.
Если нужно записывать имя ПК, то выделяйте 256 байт. НО НИКАК НЕ 65535 СУКА!!! Такой хуйни быть не должно
SQL:
'id' int(4) NOT NULL,
'name' text(256) NOT NULL
Если есть доступ к конфигам сервера - желательно настроить connection throttle, как это сделать можно найти Здесь
Для передачи данных предпочтительно использовать не GET запросы, а POST. Мне например стало бы лень флудить ПОСТом, нежели ГЕТОМ)

Только что, обнаружил что мне лень писать код, т.к еще не знаю, зайдет ли такая статья публике. Пишите в комментах нужен ли вам готовый код того, как это должно примерно выглядеть. Так же отпишите - если хотите увидеть разбор кода крупного проекта
 
Последнее редактирование:

cover

Известный
Проверенный
249
267
Не вздумайте такое использовать в больших проектах, такой код не очень хорош для них, кстати если кому будет интересно, я разберу код одного из своих крупных проектов. Отпишете в комменты
Я думаю, те, кто решился делать какой-то крупный проект, понимают, что у них будет далеко не один запрос к базе и они будут использовать PDO + подготовленные запросы, а возможно и какой-то простой\популярный фреймворк(что было бы правильнее), который защищен от инъекции из коробки. Но это не точно)
 
  • Нравится
Реакции: AnWu

HellsCoder

Известный
Автор темы
Проверенный
236
239
Я думаю, те, кто решился делать какой-то крупный проект, понимают, что у них будет далеко не один запрос к базе и они будут использовать PDO + подготовленные запросы, а возможно и какой-то простой\популярный фреймворк(что было бы правильнее), который защищен от инъекции из коробки. Но это не точно)
Там обычно используется своя либа для работы. Т.к в крупных проектах используется шардинг, репликация и прочая поебота. Все под конкретный проект подстраивается. Опять же, если хотите чтобы я разобрал крупный проект на важные кусочки кода - пишите в комменты))
 

iAmerican

Известный
Друг
616
253
Гайд расписан классно , но всё это для вообще даунов. Которые ебашут привязку в клео или луа скрипты.
Те кто с умом подходим к этому , врятли допускают этих ошибок.
 

HellsCoder

Известный
Автор темы
Проверенный
236
239
Гайд расписан классно , но всё это для вообще даунов. Которые ебашут привязку в клео или луа скрипты.
Те кто с умом подходим к этому , врятли допускают этих ошибок.
Ну, пусть учатся) Где-то же надо новичкам брать информацию)
 

Frapsy

Известный
Проверенный
403
234
Ну, пусть учатся) Где-то же надо новичкам брать информацию)
Хоть убей, но, при желании - любой новичок найдет инфу в гугле. Верно сказано выше, для даунов, ибо это банальная фильтрация и собственно все, но.. Ее разжевали в сети уже много-много лет назад и до сих пор мусолить - тупо.
Еще не учтен момент, что когда переменная задумана под число, то было бы неплохо прогонять ее через intval(), чтобы в случае несостыковки - не делать лишнего запроса, который будет некорректным в плане отправляемых данных.
Про проверки на пустоту и прочие мелочи - уже и не говорю. Но опять же, это все по 100500 раз объяснялось и те, у кого есть желание - инфу найдут и все поймут. Точно деградация какая-то, зачем разжевывать то, что и так давно переварено ._.
 

HellsCoder

Известный
Автор темы
Проверенный
236
239
Хоть убей, но, при желании - любой новичок найдет инфу в гугле. Верно сказано выше, для даунов, ибо это банальная фильтрация и собственно все, но.. Ее разжевали в сети уже много-много лет назад и до сих пор мусолить - тупо.
Еще не учтен момент, что когда переменная задумана под число, то было бы неплохо прогонять ее через intval(), чтобы в случае несостыковки - не делать лишнего запроса, который будет некорректным в плане отправляемых данных.
Про проверки на пустоту и прочие мелочи - уже и не говорю. Но опять же, это все по 100500 раз объяснялось и те, у кого есть желание - инфу найдут и все поймут. Точно деградация какая-то, зачем разжевывать то, что и так давно переварено ._.
Зачем искать в гугле - когда тут она на блюдце и разжевана. Почти готовый код дал. В любом случае так легче. Уже состоявшееся разработчики не могут четко сказать - а действительно ли НОВИЧОК нагуглит инфу
 

Azller Lollison

я узбек
Друг
1,286
1,989
Гайд расписан классно , но всё это для вообще даунов. Которые ебашут привязку в клео или луа скрипты.
Те кто с умом подходим к этому , врятли допускают этих ошибок.
Думаешь на луа нельзя сделать нормальную привязку?)
 

AnWu

Известный
Всефорумный модератор
4,154
3,838
Не задавался таким вопросом. В луа есть функции эвалуации? Аналог eval в JavaScript
ваще хз. Не рассматривал никогда луа как приват софт, потому-что это хрень. Луа должен быть открытым и общедоступным. Приваты на всяких АСИ писать надо.ю