24.05.2020, 18:42
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от konsa
|
Да нет, для меня важно и мнение
|
Вам больше нужно уделять внимание не моему мнению, а тому на чем советуют заострять внимание.
VALUES (? ... и bind_param
экранируют параметры запроса исключив инъекцию. Но ведь у вас ID пациентов не число, что уже само по себе затруднение, а ведь можно прислать и фиктивный ID, а вы будете писать в базу. Как минимум нужно удостовериться в том, что это ожидаемый ID - https://www.php.net/manual/ru/book.filter.php , непосредственно подставлять в запрос $_POST['kasId'] конечно же нельзя.
|
|
24.05.2020, 18:45
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от konsa
|
только в Денвере(
|
Пост 39 и проверьте, чудес не бывает, есть какая-то причина, тем более, что сервер отвечает как вы утверждаете.
|
|
24.05.2020, 19:00
|
Интересующийся
|
|
Регистрация: 05.02.2020
Сообщений: 26
|
|
Сообщение от laimas
|
Пост 39 и проверьте, чудес не бывает, есть какая-то причина, тем более, что сервер отвечает как вы утверждаете.
|
Тут вы оказались правы, моя невнимательность. Все заработало!
|
|
24.05.2020, 19:01
|
Интересующийся
|
|
Регистрация: 05.02.2020
Сообщений: 26
|
|
Сообщение от laimas
|
Вам больше нужно уделять внимание не моему мнению, а тому на чем советуют заострять внимание.
VALUES (? ... и bind_param
экранируют параметры запроса исключив инъекцию. Но ведь у вас ID пациентов не число, что уже само по себе затруднение, а ведь можно прислать и фиктивный ID, а вы будете писать в базу. Как минимум нужно удостовериться в том, что это ожидаемый ID - https://www.php.net/manual/ru/book.filter.php , непосредственно подставлять в запрос $_POST['kasId'] конечно же нельзя.
|
А вот с этим мне предстоит серьезно разобраться, чем сейчас и займусь
|
|
24.05.2020, 19:04
|
Интересующийся
|
|
Регистрация: 05.02.2020
Сообщений: 26
|
|
Еще один вопросик:
kasId у меня нигде не вводится, он генерируется random() при вводе нового пациента, может что-то и тут можно правильнее сделать?
|
|
24.05.2020, 19:12
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от konsa
|
kasId у меня нигде не вводится, он генерируется random()
|
Это не случайное, если говорить правильно, это псевдослучайное значение. То есть, уникальности, что обязательно должно быть у каждого из пациентов, такое ID не гарантирует. Уберите его и пусть это будет поле с автоинкрементом, какие-то ID с буковками, если они так нужны, можете держать в другом поле, хотя начерта они нужны, если только это не признаки по каким либо группам.
А числовой ID легко проверить приведением к integer, как ранее показывалось. Если запрос "с довеском инъекции", то будет 0 (или только число), а таких ID в базе не будет, что сразу дает понять - запрос левый, а значит, и базу можно не тревожить, и проходимцу вообще не отвечать.
PS. Если ID реально (возвращает не 0), то сначала лучше убедиться в том, что такой пациент в базе есть, и только есть, тогда запись.
Последний раз редактировалось laimas, 24.05.2020 в 19:17.
|
|
24.05.2020, 19:23
|
Интересующийся
|
|
Регистрация: 05.02.2020
Сообщений: 26
|
|
Огромное спасибо, ребята! Я может и затупил мощно, но, благодаря вам открыл для себя много нового. По меньшей мере знаю в какую сторону двигаться в данный момент, за что спасибо laimas и Rise
|
|
24.05.2020, 22:38
|
Интересующийся
|
|
Регистрация: 05.02.2020
Сообщений: 26
|
|
Сообщение от laimas
|
А числовой ID легко проверить приведением к integer, как ранее показывалось. Если запрос "с довеском инъекции", то будет 0 (или только число), а таких ID в базе не будет, что сразу дает понять - запрос левый, а значит, и базу можно не тревожить, и проходимцу вообще не отвечать.
|
Но, обращение в базу ведь все равно будет?
|
|
25.05.2020, 01:27
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Вы знаете, что ID, это уникальный, в пределах типа поля, числовой идентификатор. При этом значения его всегда начинаются с 1, если только с дури самому не добавить 0. Если это один параметр запроса, то перед тем как вставить его значение в запрос приводим его к integer и проверяем:
if($id = (int)$_POST['id']) { ... }
Если вместо числа пришлют запрос, который хотят подставить к формируемому запросу, то $id будет равно 0. Зачем делать запрос к базе (писать в нее), зная, что таких id конечно же нет?
Но приведение к INT также может вернуть число и больше 0, значит ли это, что мы должны поверить и с радостью записать его в базу? Допустим у меня нет цели взломать вас, я просто шкодник, и если вы пишите в базу все что пришло, что мне мешает записать в нее кучи фикций? Конечно, вы можете в режиме администрирования или же планировщиком шерстить периодически свою базу на наличие недействительных данных удаляя их. Но может быть лучше проверить и если запрос "SELECT 1 FROM patients WHERE id = $id" закончился удачей, то добавляем запись в базу, иначе дурят нас?
Последний раз редактировалось laimas, 25.05.2020 в 01:43.
|
|
|
|