Отключить кнопку отправки формы — innerHTML (угроза безопасности) и стиль CSS (повторный ввод)

#javascript

#javascript

Вопрос:

Я создал кнопку, которая, надеюсь, разрешает отправку только после нажатия на нее (здесь код).

  1. InnerHTML Представляет ли использование угрозу безопасности? (Я смотрел онлайн-курс, которого InnerHTML следовало избегать)

  2. Когда я отключаю указатели / курсоры, кажется, что кнопки сбрасываются CSS , и мне приходится снова вводить inline CSS для кнопки Javascript . Почему это так?

    Результаты

      function change_button() {
    document.getElementById('get-results').innerHTML = 'Processing....';
    document.getElementById('get-results').style.cssText = 'pointer-events:none !important;cursor:not-allowed !important; height: 44px; color:#fff; font-size:18px; padding: 9px 20px; background-color: #000; display:inline-block; padding-right: 20px;'
    }
      

Комментарии:

1. Для номера 2 это потому, что вы устанавливаете весь CSS этого элемента только для событий указателя (хотя в этом примере вы добавили дополнительные элементы обратно). Без дополнительных вещей эта строка будет делать это: {color: #334466;width: 12px;} —> {pointer-events:none;} поскольку это перезаписало бы весь объект стиля CSS с помощью этого одного набора правил CSS.

2. Итак, возможно ли добавить новые события указателя / CSS курсора в JS без сброса стиля кнопок? Пожалуйста, разветвите и покажите в Codepen, если это действительно возможно.

3. Да, вы можете. Используйте element.style.backgroundColor = ‘#334466’; Замените нужное вам свойство. Смотрите: kirupa.com/html5/setting_css_styles_using_javascript.htm

Ответ №1:

Вероятно, лучше просто установить для кнопки значение disabled, что должно предотвратить дальнейшие нажатия, и вам также не нужно будет возиться с вашим CSS. Как упоминалось в комментариях, ваш текущий код стирает существующие стили, примененные к кнопке.

Тем не менее, я бы все равно внедрил механизм на стороне сервера, чтобы предотвратить двойную обработку ваших отправленных данных, поскольку могут быть другие способы, которыми может произойти дублирование отправки, например, обновление браузера.

Что касается рисков безопасности, связанных с использованием innerHTML, я не знаю ни о каких в этом случае… Можете ли вы подробнее рассказать о том, какие риски вас беспокоят?

Кстати, передача ссылки на «this» в вашем onclick дает вам простой способ ссылаться на нажатую кнопку без необходимости использовать getElementById .

 function change_button(btn) {
  btn.disabled = true;
  btn.innerHTML = "Processing...";
}  
 <button type="button" onclick="change_button(this);" style="cursor: pointer; height: 44px; color:#fff; font-size:18px; padding: 9px 20px; background-color: #000; display:inline-block; padding-right: 20px;" id="get-results">Results</button>  

Комментарии:

1. Можно ли использовать innerHTML? Никаких рисков для безопасности или чего-либо еще (или это рискованно только при вводе на стороне клиента. например. Кто-нибудь вводит что-то в поле ввода и т. Д.)

2. Я не вижу, как может быть какая-либо угроза безопасности, связанная с заменой innerHTML простой строковой константой («Обработка …»). Я уверен, что могут быть последствия для безопасности, если содержимое содержит разметку / скрипт и / или было взято из пользовательского ввода. Это применимо везде, где используется этот тип содержимого, однако это не имеет особого отношения к свойству innerHTML.