2013-09-18 4 views
4

Я пишу приложение для веб-сайта, чтобы позволить пользователю выбирать начинки для своей пиццы с помощью флажков. Каждый чекбокс присваивается имя для своего значения атрибута, например:Hacking Checkbox Значения

<li name="meatItem" id="m1"><input type="checkbox" name="checkItem" id="Pep" value="1.5">Pepperoni</li> 

Я собираюсь написать PHP скрипт, который перебирает все флажки и определяет цену для пиццы, добавляя все значения из каждый флажок. Но я беспокоюсь о том, что HTML взломан, чтобы изменить атрибуты значения, что, очевидно, привело бы к тому, что мой скрипт ценообразования php был неточным. Является ли это серьезной проблемой? Есть ли способ избежать этого?

+5

Тогда не храните цены на лицевой стороне. На заднем конце pepperoni = x. –

+0

Да, что сказал @relentless, просто введите переменную типа '$ pep = 1.5', а затем для каждого из них добавьте это значение в текущее значение – TheNytangel

+1

Да, укажите значение« y »или« 1 », что означает« on », , и измените 'name =" checkItem "' для соответствия вашему 'id', т.е. установите его в' Pep'. Затем вы можете получить это значение на стороне сервера и преобразовать его в цену. – halfer

ответ

6

Вместо того, чтобы иметь значения цены непосредственно в флажке HTML, вы должны иметь значение флажка вместо «кода», которое сопоставляется с тем, что хочет. Как 1 = сыр, 2 = перец и т. Д. Затем на бэкэнде, введите код => сопоставление цен и вычислите цену +, какие начинки необходимы в PHP, на основе того, какие коды были указаны. Или, как вы говорите, вполне возможно, чтобы кто-то взломал эти ценности.

+0

Если вы используете коды, люди по-прежнему могут изменять значения одного более дорогого кода, такого как pepperoni's, на более дешевый код, например, на сыр. (Если есть какие-либо различия в цене между ингредиентами.) – Enigmadan

+2

Это правда, но тогда скрипт php просто увидит, что они заказали сыр, и у них закончится неправильная пицца. Или, может быть, они меняют код для пепперони на сыр, а также на выбор сыра, тогда у них есть 2 заказа на сыр ... В основном они МОГУТ все еще изменить стоимость, но это не поможет им. –

+0

все изменения в кодах бы изменили бы порядок, а не получите более дешевую пиццу –

5

Проще говоря, никогда не доверяйте никому, к которому пользователь может войти, когда-либо.

Да, кто-то может легко изменить эти значения, на самом деле они могут отправить свою форму на свою страницу с любыми значениями и т. Д., Которые они хотят.

Вы бы лучше взяли предоставленные данные (т.е. POST/GET) и сначала проверили имена и данные, какими они должны быть (то есть strlen(), regex для A-z0-9, возможно массив со всеми достоверными данными, и т. д.), а затем, когда вы счастливы, все представленные данные действительны, затем получите свои цены из базы данных/другого источника на основе имен форм.

Просто разместив их в форме, кто-то изменит цены на 0,00 и получит их бесплатно. Таким образом, это бессмысленные цены проводки в форме, когда вам все равно придется проверять их со своего источника (mysql и т. Д.).

+2

Спасибо! :) @James – gcc