DropDown защита?

dreamteck

Registered
Здравейте! Имам въпрос относно защитата.
Осъзнах, че ако имам една форма с дропдаун меню и правя записи в базата данни с това, което е избрано в дропдаун менюто, лесно мога да си изменям информацията, която записвам.

Например, ако имам едно меню:

HTML:
<select name="gender">
<option>male</option>
<option>female</option>
</select>

Мога лесно през хром да му дам Inspect Element, да заместя едно от двете с ... да кажем "dreamteck" и да събмитна формата. Принципно сигурността ми куца доста и със сигурност в момента "откривам топлата вода", но искам да попитам кой е най - ефикасният и лесен начин да се предпазя от това?

Единият е просто да правя проверка дали информацията от дропдаун менюто съвпада с това, кеото би трябвало да е дропдаун менюто. Това мога да го направя, но е доста тегаво, когато имам повече записи в менюто.

Благодаря предварително!
Поздрави!
 
Най-лесният вариянт е частично този който си посочил. В базата данни направи таблица която трябва да съдържа елементите от drop down menu-то, обикновенно това може да са списък с категории на нещо / градове / държави и т.н.

След като потребителя субмитне формата, пречисти информацията - mysql_real_escape_string , увери се, че е число ако е такава стойноста която очакваш и т.н. (всичко което обикновенно би направил с всеки друг елемент от формата).

След като си сигурен, че няма опасност от sql injection правиш заявка към базата данни с която се опитваш да провериш стойноста която е субмитната с dropdown полето се намира в таблицата със стойности които си направил преди това. Ако всичко е точно и има върнат резултат, то всичко е както трябва. Ако няма върнат резултат от заявката то значи нещо е променяно по формата. :)

Още 1 начин който ще ти спести добавянето на нова таблица и 1 заявка към базата данни е, ако може стойностите на нещата в dropdown-а да са числа. Тогава може просто да провериш дали стойноста е число и ако е, дали е между 1 и 100 да речем. Ако е число и е между 1 и 100 тогава няма проблем, ако не тогава има нещо нередно.
 
Благодаря ти! Значи общо взето е това, което и аз си мислех - трябва да имам проверка. А мога да държа нещата в масив, от този масив да генерирам самото меню и след това да напиша функция за сравнение с масива и така ще мога да ползвам това нещо многократно на много места, улеснено без да се налагат нови таблици в DB-то, щото това няма да е никак приятно.

Това с числата също ми харесва! Не е лоша идея никак. На доста места в моя случай ще може да се имплементира.

Ами благодаря ти! Ще почвам да оправям security flaws :)
 
На мен ми дойде и още една идея... трупаш възможните отговори в масив и после с in_array() проверяваш дали е там... Но така става малко бавно за по-големи списъци
 

Back
Горе