locust
Новичок
Какое максимальное целое беззнаковое число может принять переменная в РНР?
Здравствуйте. Фактически, есть две проблемы - одна из которых техническая, а вторая скорее относится к теории и выборе алгоритма - не знал в каком разделе создать тему, так что прошу прощения если ошибся в выборе.
Пишу скрипт некой лотереи, суть которой заключается в том, что победителем оказывается тот человек, который назовет наименьшее уникальное число. Принимаемые от юзеров числа обрабатываются скриптом автоматически раз в сутки и оглашается победитель.
Я незнаю какое максимальное целое беззнаковое число может принять переменная в РНР (вроде как немногим больше 4 млрд. для 32-разрядной системы, но не уверен в том, что это максимум), поэтому возникают некоторые опасения по поводу безопасности работы скрипта. Прошу выслушать мои предположения:
1. если предположить, что найдутся юзеры, которые смогут сделать перебор по большому диапазону чисел программным методом (за участие в лотерее платить не надо - это раз, и угадывать число можно сколько угодно раз - это два), то это в итоге может привести к самым неожиданным последствиям. Например, максимальное число, которое может принять переменная в РНР - 1000. Злоюзер передаёт скрипту все 999 чисел по несколько раз, а число 1000 - один раз. В итоге получается, что минимальное уникальное число - 1000 и злоюзер становится победителем.
2. второе опасение - выход за диапазон максимально допустимого значения. Вернемся к примеру с одной тысячей: если передать скрипту число больше 1000, оно автоматически становится числом начала диапазона (например, если передать 1005 - скрипт превратит это число в 4).
В качестве защиты конечно можно использовать ограничения по "угадыванию" в определенный промежуток времени ( что уже не вяжется с предполагаемой политикой лотереи) и другие уловки, но всё это рано или поздно кто-то обойдет и лотерея окажется уязвимой.
Еще я думал над тем, чтобы принимать в переменную не число, а строку длиной в 255 символов, что уже фактически нереально подобрать за сутки. Всю работу по выборе минимального уникального значения хочу возложить на MySQL и работа эта будет проводиться раз в сутки - в период, когда по статистике меньше всего посетителей, поэтому возможная нагрузка на сервер и длительное выполнение не имеют значения, в принципе.
За чем я обращаюсь к конференции? За подсказкой на эти три вопроса:
1. Какое всё-таки максимальное целое беззнаковое значение может принимать переменная в РНР?
2. Какие еще потенциальные опасности ждут мой скрипт?
3. Есть ли на Ваш взгляд более разумные способы реализации данной идеи?
Здравствуйте. Фактически, есть две проблемы - одна из которых техническая, а вторая скорее относится к теории и выборе алгоритма - не знал в каком разделе создать тему, так что прошу прощения если ошибся в выборе.
Пишу скрипт некой лотереи, суть которой заключается в том, что победителем оказывается тот человек, который назовет наименьшее уникальное число. Принимаемые от юзеров числа обрабатываются скриптом автоматически раз в сутки и оглашается победитель.
Я незнаю какое максимальное целое беззнаковое число может принять переменная в РНР (вроде как немногим больше 4 млрд. для 32-разрядной системы, но не уверен в том, что это максимум), поэтому возникают некоторые опасения по поводу безопасности работы скрипта. Прошу выслушать мои предположения:
1. если предположить, что найдутся юзеры, которые смогут сделать перебор по большому диапазону чисел программным методом (за участие в лотерее платить не надо - это раз, и угадывать число можно сколько угодно раз - это два), то это в итоге может привести к самым неожиданным последствиям. Например, максимальное число, которое может принять переменная в РНР - 1000. Злоюзер передаёт скрипту все 999 чисел по несколько раз, а число 1000 - один раз. В итоге получается, что минимальное уникальное число - 1000 и злоюзер становится победителем.
2. второе опасение - выход за диапазон максимально допустимого значения. Вернемся к примеру с одной тысячей: если передать скрипту число больше 1000, оно автоматически становится числом начала диапазона (например, если передать 1005 - скрипт превратит это число в 4).
В качестве защиты конечно можно использовать ограничения по "угадыванию" в определенный промежуток времени ( что уже не вяжется с предполагаемой политикой лотереи) и другие уловки, но всё это рано или поздно кто-то обойдет и лотерея окажется уязвимой.
Еще я думал над тем, чтобы принимать в переменную не число, а строку длиной в 255 символов, что уже фактически нереально подобрать за сутки. Всю работу по выборе минимального уникального значения хочу возложить на MySQL и работа эта будет проводиться раз в сутки - в период, когда по статистике меньше всего посетителей, поэтому возможная нагрузка на сервер и длительное выполнение не имеют значения, в принципе.
За чем я обращаюсь к конференции? За подсказкой на эти три вопроса:
1. Какое всё-таки максимальное целое беззнаковое значение может принимать переменная в РНР?
2. Какие еще потенциальные опасности ждут мой скрипт?
3. Есть ли на Ваш взгляд более разумные способы реализации данной идеи?