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

в 6:13, , рубрики: vulnerability, xss, информационная безопасность, ненормальное программирование, Программирование, Разработка веб-сайтов, уязвимость, хабра-папа, хабрахабр
Чем хороший программист отличается от плохого, или почему нужно выходить за рамки - 1

Это будет моя самая короткая статья.

>">Когда-то я был молод и зелен и решал проблемы именно так, как их решают джуны. Алгоритм такой:

  1. Узнать о проблеме

  2. Локализовать проблему

  3. Загуглить проблему и решение

  4. Пофиксить проблему

Например: эксель-файл содержит ошибку, и поэтому не может быть обработан. Я открывал файл, редактировал проблемную строчку, закрывал файл. Проблема решена.

Или другой пример: не отработал скрипт из-за ошибки в коде. Чиню ошибку, скрипт начинает работать.

Прошло 10 лет... Алгоритм претерпел изменения:

  1. Узнать о проблеме

  2. Локализовать проблему

  3. Загуглить проблему и посмотреть много решений

  4. Понять, почему это произошло

  5. Понять, что нужно сделать, чтобы это не произошло снова

  6. Понять, что ещё затронуто проблемой

  7. Понять, где ещё потенциально могут возникнуть похожие проблемы

  8. Пофиксить проблему

  9. В зависимости от количества необходимых усилий, пофиксить всё сопутствующее

  10. Рассказать пацанам в слаке про свой фейл (== поделиться опытом)

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

Или другой пример: не отработал скрипт из-за ошибки в коде. Разбираюсь, кто написал скрипт, почему писал ручками вместо того, чтобы вызвать какую-то команду для настройки и деплоя, где ещё подобные ошибки могут быть (и в этом проекте, и в проектах других клиентов), чиню и делаю всё возможное, чтобы это не произошло опять.

К чему всё это

Пожалуйста, не решайте конкретную проблему. Это никогда не работает. Оно сломается снова.

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

Иначе я так и буду находить XSS в тех же местах, о которых писал ранее.

Пейлоад тот же, что и в прошлой статье:

{
	"type": "persona",
	"attrs": {
		"inserted": false
	},
	"content": [
		{
			"type": "persona_image",
			"attrs": {
				"src": "javascript:"></a>
                <div/onmouseover=alert('xss')>
                    <div/style="position:fixed;bottom:0;width:100%;height:100vh;background-image:url('https://c.tenor.com/GjsMO1r7HGMAAAAC/hyenas-lion-king.gif');background-position:center;background-repeat:no-repeat;background-size:cover;">
                         &nbsp;
                    </div>
                </div>
                <!--<a",
				"class": "image image-persona"
			}
		},
		{
			"type": "persona_heading",
			"content": [
				{
					"type": "text",
					"text": "<-- Нажимайте сюда"
				}
			]
		},
		{
			"type": "paragraph",
			"attrs": {
				"align": null,
				"simple": false,
				"persona": false
			}
		}
	]
}

UPD. Разрабы Хабра после выхода статьи быстро пофиксили баг. По их словам, вопрос с валидацией в работе. Я не предупреждал о статье, но меня не забанили и отнеслись ко всему позитивно - за это респект.


Заходите в мою телегу: Блог погромиста. Это просто ссылка, не XSS :)

Автор:
kesn

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js