Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
вопрос по php |
Философия, технологии, алгоритмы! |
|
|
Опции темы |
07.12.2005, 13:14 | #1 |
Форумец
Сообщений: 28
Регистрация: 12.10.2005
Возраст: 40
Не в сети |
вопрос по php
Как, в случае ввода пользователем в текстовое поле типа <input type =text> всего чего угодно, только не какого-то числа, выводилось сообщение об ошибке и ничего далее не делалось, т. е. чтобы в поле можно было ввести только число.
|
07.12.2005, 14:47 | #9 |
Registered User
Сообщений: 1,905
Регистрация: 25.03.2003
Не в сети |
fuhrer
ты пишешь никому ненужный курсовик или реальное приложение для интернета? это число потом участвует в дальшейших запросах к БД, вычислениях или программной логике? хотелось бы чтобы программисты понимали, что яваскрипт спасет от неаккуратного ввода, но не от злонамеренного хакера. |
07.12.2005, 15:14 | #11 |
фотограф
Сообщений: 2,738
Регистрация: 20.10.2004
Не в сети |
fuhrer
тогда перед занесением его в базу нужно сделать проверку, вот тут как раз php, http://php.net/is_int/ |
07.12.2005, 15:17 | #12 |
Registered User
Сообщений: 1,905
Регистрация: 25.03.2003
Не в сети |
ну вот, если не перепроверить значение и в php - получишь типичную ошибку SQL-injection. об это много понаписано.
fuhrer товарыщи тоже дело говорят: обычно делают проверку данных на javascript на клиентской стороне, еще до отсылки на сервер, чтобы пользователю по 10 раз не запрашивать страничку. Но и проверками на стороне php пренебрегать не следует. Злонамеренный пользователь может отключить жаваскрипт и запихать тебе в базу данных каких захочет. простая строчка $num=(int)$num; гарантирует что у тебя в переменной будет число (или 0, что не так уж плохо) loshadka учимся не только читать, но и анализировать вопрос ). |
07.12.2005, 22:30 | #16 |
Registered User
Сообщений: 1,905
Регистрация: 25.03.2003
Не в сети |
yujanin ну да, практически то же самое, но приведение типов смотрится короче и благороднее.
maximn просто такова сложившая практика php, ленивые программисты вместо обработки ошибок приводят типы и пихают везде die(), после обнаружения злонамеренных действий скрипты больше ничего не делают а просто мрут |
07.12.2005, 22:36 | #18 | |
Форумец
Сообщений: 1,581
Регистрация: 11.04.2003
Не в сети |
Цитата:
|
|
08.12.2005, 00:02 | #19 | |
error #65535
Сообщений: 5,240
Регистрация: 16.11.2003
Возраст: 24
Не в сети |
Цитата:
от чего ты его защитить решил? $num = intval($_POST['num']); mysql_query("UPDATE my_tbl SET num='".$num."' WHERE ...") //и зачем вот тут die()!? или такой вариант: $num = intval($_POST['num']); if (!$num) { //а тут он зачем? } else { mysql_query("UPDATE my_tbl SET num='".$num."' WHERE ...") } или ты придумал новые типы инджекшена? ЗЫ НЕЗАВИСИМО от того что прислал пользователь, скрипт НЕ должен аварийно и молча завершаться НИКОГДА |
|
08.12.2005, 10:01 | #20 |
Registered User
Сообщений: 1,905
Регистрация: 25.03.2003
Не в сети |
страшно далеки вы от народа) расскажите почему не должен?
вот сейчас посчитал в vbulletin 26 раз die. представь что ты пишешь небольшую модификацию незнакомого проекта, и после твоего кода там могут быть еще какие-то вычисления с той же переменной. die() гарантирует скрипт точно остановится и даже попытается в html вывести ошибку. |
08.12.2005, 13:15 | #21 |
error #65535
Сообщений: 5,240
Регистрация: 16.11.2003
Возраст: 24
Не в сети |
будем считать что это мое имхо, каждый ****** по-своему..
если не сложно, сосчитай, сколько раз в vBulletin встречается 'at' и напиши сюда. я бы сам посчитал, но мне его качать нужно, а раз уж он у тебя стоит.. ЗЫ не написать мне своего vBulletin'a.. мечты разбиты вдребезги.. |
08.12.2005, 14:40 | #23 |
Registered User
Сообщений: 1,905
Регистрация: 25.03.2003
Не в сети |
кто должен? кому? никому я не должен)
если все данные уже проверены в жавскрипте, то можно спокойно помирать, хакиров за людей не считаем) maximn "at" это что вообще ?подавление ошибок @ ? - очень много, пальцев не хватит. вообще в vbulletin есть более приличная обработка нефатальных ошибок: мылит на почту или в файл пишет. как пойдет мылить ошибки админу, только успевай чистить. кроме того своя система отладки. это, скорее, исключение и общей массы движков. |
08.12.2005, 14:42 | #24 |
Registered User
Сообщений: 1,905
Регистрация: 25.03.2003
Не в сети |
ну например :
if (!defined('THIS_SCRIPT') AND strpos(strtolower($script), 'global.php') !== false) { die('<p><strong>Critical Error</strong><br />global.php must not be called directly.</p>'); } Ну в каком страшном сне юзер будет вызывать init.php ?? Die и все тут! |
08.12.2005, 15:46 | #25 | |
error #65535
Сообщений: 5,240
Регистрация: 16.11.2003
Возраст: 24
Не в сети |
Цитата:
случай №1 когда без die() нельзя обойтись, это header+die про 'at'ы (собаки) в vBulletin - самого думаю улыбнуло =) зы всё имхо |
|
08.12.2005, 16:34 | #26 |
Registered User
Сообщений: 1,905
Регистрация: 25.03.2003
Не в сети |
так я и не понял чем die тебе не угодил.
die это скорее sanity check, чем обработка ошибок пользователя и если все перечитать сначала, то применяется очень даже к месту. в приведеном мною коде, ничего не мешает вывести ошибку красиво и тд. просто вызов модуля прямо браузером - абсолютно ненормальный случай, наверняка хакерский, возиться c этим случаем никто не хочет. |
08.12.2005, 18:43 | #27 | |
Форумец
Сообщений: 1,581
Регистрация: 11.04.2003
Не в сети |
Цитата:
|
|
08.12.2005, 19:06 | #28 | ||
Форумец
Сообщений: 1,581
Регистрация: 11.04.2003
Не в сети |
Цитата:
mysql_query("UPDATE my_tbl SET num='".$num."' WHERE ...") }[/php] может идти ещё до хера стейтментов в скрипте. при этом у тебя продолжает идти вывод - но уже с одной неправильной переменной и с одним пропущенным sql-стейтментом. как это скажется в дальнейшем на исполнении скрипта (особенно, если скрипт большой) - одному богу известно. поэтому нельзя уповать на то, что в дальнейшем $num не пригодится или что и без этого UPDATE всё нормально прокатит - нельзя. нужно обработать ошибку. Цитата:
|
||
08.12.2005, 22:22 | #29 | |||
error #65535
Сообщений: 5,240
Регистрация: 16.11.2003
Возраст: 24
Не в сети |
Цитата:
2. да мне пофиг есть там num=0 или нет, мы тут ввод пользователя проверяем, если ты не в курсе 2. $num > 0 - слов нет, это что? лирическое отступление автора? Цитата:
Цитата:
ты плохо знаешь пользователей, будут они и квоты и даблквоты пихать поверь. пойми - от пользователя НЕ может прийти данных вызывающих ошибку. всё, точка. всё что пришло - это заебатые данные априори. это проблема программиста их проверять и обрабатывать. но если они пришли, то так и надо - этого хочет пользователь. и если он хочет искать по ' UNION .., значит ты ДОЛЖЕН искать по ' UNION ... Если он хочет логин ' or 1=1 , то у него ДОЛЖЕН быть именно такой логин. Ошибок ввода не бывает, бывают ошибки их обработки. |
|||