Насколько безопасны отключенные кнопки в React?

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

//This is how the button looks like in Chrome developer tools

<button disabled>Post</button>

//editing out "disabled" does nothing. The click event doesn't get called

Интересно, что попытка отключить включенную кнопку также ничего не меняет. Метод onClick по-прежнему вызывается при нажатии.

До моего открытия я всегда использовал флаг, чтобы заблокировать щелчок, если злоумышленник активировал кнопку.

....
const [enabled, setEnabled] = useState(false)
....

....
const postData = () = {
   if(!enabled) return;

   //sensitive action takes place here
}
....

....
return(
    <button disabled={!enabled} onClick={postData}>Post</button>
);
....

Я просто хочу знать, безопасно ли удалять строку if(!enabled) return; из функции postData(). Существуют ли другие инструменты, которые действительно могут активировать отключенную кнопку реагирования или напрямую вызывать postData()?


person YoungDON    schedule 13.05.2020    source источник
comment
Вы можете поместить точно такой же код, который решает, должны ли кнопки быть отключены в вашем обработчике событий (и мгновенно return, если это необходимо). Но если это проблема безопасности, общее правило состоит в том, чтобы никогда не доверять тому, что вам отправляет внешний интерфейс, и адаптировать свое поведение на стороне сервера.   -  person Treycos    schedule 13.05.2020
comment
@Treycos Разве это не то, что я делаю в примере, или я что-то упускаю?   -  person YoungDON    schedule 13.05.2020


Ответы (1)


Кнопка disabled так же безопасна в React, как и в HTML. В конечном счете, браузер понимает и получает элементы DOM, и React, отображаемый в браузере, не является исключением. Тем не менее, никогда не полагайтесь только на внешний интерфейс для какой-либо безопасности, а также используйте проверки на стороне сервера и проверки безопасности.

person SAURABH    schedule 13.05.2020
comment
Я понимаю. То есть вы говорите, что наличие там флага или его отсутствие не имеет значения, и это никогда не бывает безопасно? - person YoungDON; 13.05.2020
comment
Да, в самом деле. Вы никогда не сможете положиться на него на 100%. - person SAURABH; 13.05.2020
comment
Ужасно, насколько легко модифицируется интерфейсный код для веба. Интересно, должны ли разработчики мобильных и настольных приложений беспокоиться о таких вещах. - person YoungDON; 13.05.2020
comment
Да, в основном так. большинство их мер безопасности находятся на их бэкэнде - person Treycos; 14.05.2020