kurkuma
08.03.2012 15:49 mind
Начал ковырять Python и сразу наткнулся на первую неприятную штуку. При конвертировании string в integer в PHP он просто выкидывал все нецифровые символы, то есть строка "1a2b3c" преобразуется в число 123. Очень удобно, кстати, применять такие штуки вместо всяких ебанутых проверок:
$id = (int) $_GET['id']; и все, например, а не втыкать какой-нибудь регексп для проверки (про is_numeric знаю, но он не только на integer'ы true возвращает).
А пистон так не может — это и огорчает, так что повременю пока с переходом на него.
ну и говноедство
насчет?
пихать данные такого вида "1a2b3c" в запрос
я такие данные не буду никуда пихать, но это же вэб. какое-нибудь хуйло может взять и в строке адреса поменять index.php?id=14 на index.php?id=1hh21d7d8273 или вообще кавычку туда засунуть
ну и посылай его нахуй с такими данными, пусть правильно вводит
делать мне больше нехуй, дрочить регекспом каждый параметр? это во-первых тормоз, во-вторых не нужно. из $_GET['id'] выдернутся чисто числа и если id есть в базе — вернется запрос нормальный и юзер угаманится, если нет — пёрнет про 404 и юзер угаманится
не проще проверять на тип данных ещё на стороне клиента, чтобы не делать личшний раз запрос к серверу?
проверять тип данных на стороне клиента получится только через javascript, который без особых напрягов можно отключить или подделать. в вебе ВООБЩЕ НЕЛЬЗЯ ДОВЕРЯТЬ КЛИЕНТУ, ты еще и экранировать кавычки предложи на стороне клиента, лол
да и зачем дрочить параметры, обычно во фреймворках идут средства валидации
в дополнение к серверной валидации
у меня в работе фреймворки не используются. я поддерживаю кучу разной сложности сайтов, большинство из которых созданы еще в 99-2000 годах, допиливаю, переделываю их — фреймворк тут воткнуть некуда просто, да он и не нужен. а
$id = (int) $_GET['id'];
например штука простая, быстрая и ненапрягающая, в отличии от например проверки по регулярному выражению
да и javascript ничего не сможет сделать, если клиент тупо в строке адреса заменит index.php?id=14 на index.php?id=1хуй4.
ну должны быть и отдельные либы валидации же
большинство пользователей и не задумываются что там у них в строке, главное чтобы КНОПОЧКА работала
зачем мне их тянуть, блять, если все решается элементарно, быстро и наглядно в пару строк на plain пыхе? зачем тащить какую-нибудь очередную либу с метр весом, с кучей всякой ненужной хуйни, для того, чтобы не пустить в $id что-то кроме чисел?
в кнопочках у меня всё ок, все валидным отдается, но никто не мешает пользователю, например, через firebug поменять html-код
ну а питон здесь причём, не cgi скрипты же писать будешь, там на уровне роутов все эти проблемы решаются
например веркцойг
>>Rule('/news/<int(min=2000, max=2099):year>/<int(min=1, max=12):month>', endpoint='news_index'),
и он примет только числа да и ещё и проверит чтобы не выходили за пороги возможных значений
а спецсиволы и буквы пошлёт, так что ИТТ ПЫХОПРОБЛЕМЫ
просто это одна из тех вещей, которая дает понять, что насколько пых по сравнению с питоном заточен под веб. и ради такого, я думаю, можно и потерперь тот косяк при сравнии строковых чисел, близких к INT_MAX
ладно, поковыряю еще питон и жагну, потом уже сделаю выводы
в пыховских фреймворках тоже роуты есть, я же делал сравнение в plain языках
какое-то мудацкое преимущество, ибо хер проссышь, что идёт внутрь, а еще крайне небезопасно. МЕНЯЙ СОЗНАНИЕ, ЭТО НЕ НЕДОСТАТОК
>>> s = "1a2b3c"
>>> print ''.join(c for c in s if c.isdigit())
123
>>> print s.lower().translate(None, ''.join([chr(c) for c in range(ord('a'), ord('z')+1)]))
123
>>> re.sub(r'\D*', '', s)
'123'
алсо, питон не нужен, рор фтв