avva: (moose)
[personal profile] avva
_GET и mysql_query вместе

75 тысяч результатов.

Это из реддита с прекрасным названием lolphp, в котором есть много смешного - например, вот эта лошадь:

Date: 2013-06-01 01:37 pm (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
на первой страничке 2/3 результатов кажется не уязвимость, а тесты сервиса (test04.php) или тесты уязвимостей "sampleSQLInjection.php"

Date: 2013-06-01 02:01 pm (UTC)
romikchef: (штора)
From: [personal profile] romikchef
Ну, зато дальше там адок начинается стопроцентный, без скидок :)
Я бы сказал, что проблема даже не в уязвимости - само по себе нахождение этих двух токенов в одном файле не означает обязательное её наличие - а, скорее, в общей культуре "пхп кодинга". По-хорошему, _GET и mysql_query не должны встречаться в рамках одного скрипта вообще.
Edited Date: 2013-06-01 02:06 pm (UTC)

Date: 2013-06-01 02:34 pm (UTC)
From: [identity profile] 109518.livejournal.com
Ну, (int)$_GET[id] уже на третей странице есть, mysql_real_escape_string я правда не нашёл.

Date: 2013-06-01 02:44 pm (UTC)
From: [identity profile] bolk.livejournal.com
Ну да, в PHP тернарный оператор левоассоциативный. Это надо просто знать, не вижу тут поводов для смущения только из-за того, что ребята из других языков привыкли, что всё работает иначе.

Date: 2013-06-01 02:50 pm (UTC)
romikchef: (штора)
From: [personal profile] romikchef
Найти-то легко - просто добавив её в поиск. Функции искейпинга строк встречаются в одной трети найденных скриптов.
Другое дело что она, в отличие от (int), никак не гарантирует защиту.

Date: 2013-06-01 02:57 pm (UTC)
From: [identity profile] 109518.livejournal.com
Сама по себе не гарантирует, но если правильно использовать то проблем не будет

Вот тут например об этом

http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string

Или ?

Date: 2013-06-01 03:11 pm (UTC)
From: [identity profile] breqwas.livejournal.com
"Дети, это нельзя понять, это можно только запомнить" (с)
С того же подреддита:

Date: 2013-06-01 03:14 pm (UTC)
From: [identity profile] bolk.livejournal.com
Да уж прям. Какое место вы не понимаете? Тут просто действуют несколько разных правил.

Date: 2013-06-01 03:29 pm (UTC)
From: [identity profile] breqwas.livejournal.com
Я могу найти разумное объяснение каждой ячейке таблицы, но россыпью граблей она от этого быть не перестаёт.
Не так страшно, что ("a" == 0) не эквивалентно ("a" == "0"). Страшно, что глядя на строчку ($var == 0) и помня, что в $var число, можно очень запросто прозевать, как это число где-то выше привелось к строке и словить трудноуловимый баг.

И это родовая травма именно php, а не какая-то глобальная проблема - рядом есть очень похожий него perl, в котором ("a" eq "0") эквивалентно ("a" eq 0), а ("a" == "0") скажет в stderr "Argument "a" isn't numeric in numeric eq (==)" (при включённых варнингах, но их включают все и всегда).

В перле тоже есть эти проблемы (спец-строка "0 but true" намекает), и в других языках есть, но не в таком количестве на ровном месте.
Edited Date: 2013-06-01 03:30 pm (UTC)

Date: 2013-06-01 03:40 pm (UTC)
romikchef: (штора)
From: [personal profile] romikchef
Ну, пока $var не станет строкой "a", никаких багов не будет



Date: 2013-06-01 03:43 pm (UTC)
From: [identity profile] breqwas.livejournal.com
!!!

Вот я и наступил на грабли. :-) Я не специально, честно!

Date: 2013-06-01 03:44 pm (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
Не понимаю, зачем разнарушать транзитивность равенства.

Не понимаю, зачем разрешать сравнение строк с чем либо, кроме строк (и возможно NULL).

Date: 2013-06-01 03:47 pm (UTC)
From: [identity profile] deone.livejournal.com
весело!)

Date: 2013-06-01 03:53 pm (UTC)
romikchef: (штора)
From: [personal profile] romikchef
нечеткая типизация такая нечеткая.
Разрешать надо, иначе ничего работать не будет.
mysql в подавляющем большинстве случаев возвращает строки
НТТР приносит только строки.
файловые функции возвращают строки.

приводить насильно - тоже не сахер, превращая 00000001 в 1

я так понимаю, на эту тему уже много и долго спорили, и нынешний вариант - далеко не худший.

Date: 2013-06-01 04:38 pm (UTC)
From: [identity profile] bolk.livejournal.com
Россыпь граблей — возможно, сейчас редко кто изучает язык, все полагаются на интуицию, но тут действую вполне определённые правила.

И мне непонятно почему "a"==0 и "a" == "0" должны давать один и тот же результат. Если программист не понимает правила преобразования, он просто не должен использовать «==», вот и всё, пусть пользуется точным равенством («===»).

Date: 2013-06-01 05:15 pm (UTC)
From: [identity profile] alexis-m.livejournal.com
я до сих пор не помню (а может и не знаю), какая ассоциативность у тернарного оператора где бы то ни было.
Стараюсь не писать их вложенными, потому что получается нечитаемая конструкция. А приходится, то ставлю скобки, потому что иначе получается нечитаемая конструкция.

Date: 2013-06-01 06:37 pm (UTC)
From: [identity profile] blacklion.livejournal.com
Во что, кстати, надо превращать 012 и что делать с 08?

Date: 2013-06-01 06:38 pm (UTC)
romikchef: (штора)
From: [personal profile] romikchef
не понял вопроса

Date: 2013-06-01 06:40 pm (UTC)
From: [identity profile] blacklion.livejournal.com
Это про автоприведение строк к числам -- мы префиксы учитываем или нет? Тоже тема для холивара.
Лучше уж всё явно.

Date: 2013-06-01 06:47 pm (UTC)
romikchef: (штора)
From: [personal profile] romikchef
Мда.
Попробовал сравнить "8" и "000000000008" - получил тру.
похоже, пых перед проверкой проверяет содержимое.

Date: 2013-06-01 07:02 pm (UTC)
From: [identity profile] blacklion.livejournal.com
Я даже скорее про то, что "012" может означать 10 а "08" не быть числом. 0 - традиционный признак восьмеричной системы же!
Не удивлюсь, если в PHP "012" это 10 а "08" это 8. Это был бы TRUE PHP WAY, IMHO.

Date: 2013-06-01 07:41 pm (UTC)
romikchef: (штора)
From: [personal profile] romikchef
нене
все традиционные признаки роляют только при парсинге же строк, прописанных руками.
А мы здесь говорим о том, что уже в строке содержится.
в этом смысле "08" - это 8, а "012" - это 12 при приведении. Это, в общем, понятно. Мускуль так же приводит, к примеру.

Но вот это - if comparison involves numerical strings, then each string is converted to a number - меня сегодня удивило. Объяснения, хоть какого завалящего - пока не нашёл.

Date: 2013-06-01 07:57 pm (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
Какой-то злобный садист придумал и вставил в PHP левоассоциативный тернарный оператор для запугивания бедных нубов. Или это хитрый тактический прием для введения в заблуждение потенциального противника, я не понял? Кому и зачем еще может понадобиться такая штуковина? В каком смысле, кроме перечисленных выше, она «работает»?

Date: 2013-06-01 08:17 pm (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
Это вы еще сравнения на больше/меньше не видели (http://phpsadness.com/sad/52).

Date: 2013-06-01 08:49 pm (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
Ыыы
Те. строки 100000000000000000000000001 и 100000000000000000000000000 тоже будут равны ?!!!!! ( количество нулей подобрано под под точность мантиссы double)

Date: 2013-06-01 09:10 pm (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
Были равны, но больше не равны ;)

https://bugs.php.net/bug.php?id=54547

Date: 2013-06-01 09:12 pm (UTC)
From: [identity profile] pingva.livejournal.com
> просто не должен использовать php

Date: 2013-06-01 09:48 pm (UTC)
romikchef: (штора)
From: [personal profile] romikchef
ага. на 32-х битах - равны.

Date: 2013-06-01 10:16 pm (UTC)
romikchef: (штора)
From: [personal profile] romikchef
а вот я и наврал. експоненту он кушает за милую душу.
("1000" == "1e3") - обратно тру.

Date: 2013-06-01 10:44 pm (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
В случае создания php вопрос "почему" не имеет смысла
Тут работает бритва хэнлона

Date: 2013-06-01 10:53 pm (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
В мире C много несчастий случилось из-за опечатки = вместо ==

Авторы PHP прошлись, во-первых, по уже известным граблям, вместо того, чтобы исправить
Во-вторых, усилили грабли, испортив == и добавив ===

это вызывает такое же уныние, как пьяная ссора с убийством — бессмысленно, печально, противно

Date: 2013-06-01 11:03 pm (UTC)
From: [identity profile] drw.livejournal.com
очень богатый образ

Date: 2013-06-02 02:00 am (UTC)
From: [identity profile] meshko.livejournal.com
Я давно говорю, что пора начинать писать фронтенд на PHP. Как ответ Node.js

Date: 2013-06-05 12:32 pm (UTC)
From: [identity profile] asox.livejournal.com
Я практически не понимаю, как такое может быть.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 10:49 am
Powered by Dreamwidth Studios