Мой веб-сайт был взломан..Что мне делать? [закрытый]

Во время недавнего опыта написания JS-переводчика я много боролся с внутренней работой дат ECMA / JS. Итак, я полагаю, что я брошу свои 2 цента здесь. Надеемся, что совместное использование этого материала поможет другим с любыми вопросами о различиях между браузерами в том, как они обрабатывают даты.

Сторона входа

Все реализации хранят свои значения даты внутри себя как 64-разрядные номера которые представляют собой миллисекунды с 01.01.1970 UTC (GMT - это то же самое, что и UTC). Даты, возникающие после 1/1/1970 00:00:00, являются положительными числами, а даты предшествуют отрицательным.

Поэтому следующий код дает точный результат во всех браузерах.

Date.parse('1/1/1970');

В моей временной зоне ( EST), результат составляет 18000000, потому что это то, сколько мс составляет 5 часов (это всего 4 часа в летние месяцы). Значение будет отличаться в разных часовых поясах. Все основные браузеры делают это одинаково.

Вот и все. Несмотря на то, что в форматах входных строк есть некоторые отклонения, которые основные браузеры будут анализировать как даты, они по существу интерпретируют их одинаково с часовыми поясами и летней экономией. Один из них - формат ISO 8601. Это единственный формат, специально описанный в спецификации ECMA-262 v.5. Для всех других строковых форматов интерпретация зависит от реализации. По иронии судьбы, это формат, в котором браузеры могут отличаться. Ниже приведен сравнительный вывод Chrome vs Firefox для 1/1/1970 на моей машине с использованием формата строки ISO 8601.

Date.parse('1970-01-01T00:00:00Z');       // Chrome: 0         FF: 0
Date.parse('1970-01-01T00:00:00-0500');   // Chrome: 18000000  FF: 18000000
Date.parse('1970-01-01T00:00:00');        // Chrome: 0         FF: 18000000
  • Спецификатор «Z» указывает, что вход уже находится в UTC и не требует смещения перед хранением.
  • Спецификатор «-0500» указывает, что вход находится в GMT-05: 00, поэтому оба браузера интерпретируют ввод как находящийся в моем локальном часовом поясе. Это означает, что значение будет преобразовано в UTC перед сохранением. В моем случае это означает добавление 18000000 мс к внутреннему значению даты, что требует сдвига -18000000 мс (-05: 00), чтобы вернуть меня в локальное время.
  • Однако, когда спецификатор отсутствует, FF обрабатывает ввод в качестве локального времени, в то время как Chrome рассматривает его как время UTC. Для меня это создает 5-часовую разницу в сохраненной стоимости, что является проблематичным. В моей реализации я оказался на стороне FF здесь, потому что мне нравится вывод toString для соответствия моему входному значению, если я не укажу альтернативный часовой пояс, который я никогда не делаю. Отсутствие спецификатора должно предполагать местный вход времени.

Но здесь ситуация ухудшается, FF обрабатывает краткую форму формата ISO 8601 («YYYY -MM-DD ") по-разному, чем обрабатывает длинную форму (« YYYY-MM-DDTHH: mm: ss: sssZ ») без каких-либо логических причин. Вот результат из FF с длинными и короткими форматами даты ISO без спецификатора часового пояса.

Date.parse('1970-01-01T00:00:00');       // 18000000
Date.parse('1970-01-01');                // 0

Итак, чтобы ответить на вопрос первоначального вопросчика, "YYYY-MM-DD" - это короткая форма ISO 8601 "YYYY-MM-DDTHH:mm:ss:sssZ". Таким образом, это интерпретируется как время UTC, тогда как другое интерпретируется как локальное. Вот почему,

Это не jive:

console.log(new Date(Date.parse("Jul 8, 2005")).toString());
console.log(new Date(Date.parse("2005-07-08")).toString());

Это делает:

console.log(new Date(Date.parse("Jul 8, 2005")).toString());
console.log(new Date(Date.parse("2005-07-08T00:00:00")).toString());

Нижняя строка - это строка синтаксического анализа. Единственная строка ISO 8601, которую вы можете безопасно анализировать в браузерах, - это длинная форма. И ВСЕГДА используйте спецификатор «Z». Если вы это сделаете, вы можете спокойно перемещаться между локальным и UTC.

Это работает в браузерах (после IE9):

console.log(new Date(Date.parse("2005-07-08T00:00:00Z")).toString());

К счастью, большинство современных браузеров другие форматы ввода одинаково, включая наиболее часто используемые форматы «1/1/1970» и «1/1/1970 00:00:00 AM». Все следующие форматы (и другие) рассматриваются как локальный ввод времени во всех браузерах и конвертируются в UTC перед хранением. Таким образом, они совместимы с кросс-браузером. Выходной код этого кода во всех браузерах в моем часовом поясе одинаковый.

console.log(Date.parse("1/1/1970"));
console.log(Date.parse("1/1/1970 12:00:00 AM"));
console.log(Date.parse("Thu Jan 01 1970"));
console.log(Date.parse("Thu Jan 01 1970 00:00:00"));
console.log(Date.parse("Thu Jan 01 1970 00:00:00 GMT-0500"));

Сторона выхода

. На стороне вывода все браузеры переводили часовые пояса одинаково, но они обрабатывать строковые форматы по-разному. Вот функции toString и то, что они выводят. Обратите внимание на то, что функции toUTCString и toISOString выводят на моей машине 5:00 AM.

Конвертирует с UTC в локальное время перед печатью

 - toString
 - toDateString
 - toTimeString
 - toLocaleString
 - toLocaleDateString
 - toLocaleTimeString

Прямая печать сохраненного времени UTC

 - toUTCString
 - toISOString 

In Chrome
toString            Thu Jan 01 1970 00:00:00 GMT-05:00 (Eastern Standard Time)
toDateString        Thu Jan 01 1970
toTimeString        00:00:00 GMT-05:00 (Eastern Standard Time)
toLocaleString      1/1/1970 12:00:00 AM
toLocaleDateString  1/1/1970
toLocaleTimeString  00:00:00 AM

toUTCString         Thu, 01 Jan 1970 05:00:00 GMT
toISOString         1970-01-01T05:00:00.000Z

In Firefox
toString            Thu Jan 01 1970 00:00:00 GMT-05:00 (Eastern Standard Time)
toDateString        Thu Jan 01 1970
toTimeString        00:00:00 GMT-0500 (Eastern Standard Time)
toLocaleString      Thursday, January 01, 1970 12:00:00 AM
toLocaleDateString  Thursday, January 01, 1970
toLocaleTimeString  12:00:00 AM

toUTCString         Thu, 01 Jan 1970 05:00:00 GMT
toISOString         1970-01-01T05:00:00.000Z

Я обычно не используйте формат ISO для ввода строки. Единственный раз, когда использование этого формата полезно для меня, - это когда даты нужно сортировать как строки. Формат ISO можно сортировать как есть, а другие - нет. Если у вас есть совместимость с несколькими браузерами, укажите либо часовой пояс, либо используйте совместимый строковый формат.

Код new Date('12/4/2013').toString() проходит через следующее внутреннее псевдопреобразование:

  "12/4/2013" -> toUCT -> [storage] -> toLocal -> print "12/4/2013"

Надеюсь, этот ответ был полезен.

21
задан EM-Creations 21 December 2017 в 15:07
поделиться

8 ответов

Попытайтесь собрать столько информации, сколько Вы можете. Посмотрите, может ли хост дать Вам журнал, показывающий все соединения FTP, которые были сделаны в Вашу учетную запись. Можно использовать тех, чтобы видеть, было ли это даже соединение FTP, которое использовалось, чтобы внести изменение и возможно получить IP-адрес.

при использовании предварительно упакованного программного обеспечения как Wordpress, Drupal, или что-либо еще, что Вы не кодировали, может быть уязвимостями в коде загрузки, который допускает этот вид модификации. Если это - сделанная на заказ двойная проверка, какие-либо места, где Вы позволяете пользователям загружать файлы или изменять существующие файлы.

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

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

существует уровень возврата, который необходимо принять во внимание также. Действительно ли повреждение стоит попытаться разыскать человека или является этим что-то, где Вы просто живете и изучаете и используете более сильные пароли?

14
ответ дан 29 November 2019 в 20:51
поделиться

Я знаю, что это немного поздно в игре, но URL, упомянутый для JavaScript, упоминается в списке сайтов, которые, как известно, были частью всплеска бота ASPRox, который запустил в июне (по крайней мере, именно тогда, мы становились отмеченными с помощью него). Некоторые детали об этом упоминаются ниже:

http://www.bloombit.com/Articles/2008/05/ASCII-Encoded-Binary-String-Automated-SQL-Injection.aspx

противная вещь об этом состоит в том, что эффективно каждое поле типа varchar в базе данных "заражено" для выкладывания ссылки на этот URL, в котором браузер получает крошечный iframe, который превращает его в бота. Основной SQL фиксирует для этого, может быть найден здесь:

http://aspadvice.com/blogs/programming_shorts/archive/2008/06/27/Asprox-Recovery.aspx

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

, Если бы он поэтому еще не сделал, я послал бы СРОЧНОЕ электронное письмо их хосту и дал бы им ссылку на тот код SQL для фиксации всей системы. Можно зафиксировать собственные затронутые таблицы базы данных, но скорее всего боты, которые делают заражение, собираются передать прямо через ту дыру снова и заразить всех.

, Надо надеяться, это дает Вам еще некоторую информацию для работы с.

РЕДАКТИРОВАНИЕ: Еще одна быстрая мысль, если он использует один из хостов средства проектирования онлайн для создания его веб-сайта, всего того содержания, вероятно, находится в столбце и была заражена тот путь.

14
ответ дан 29 November 2019 в 20:51
поделиться

Вы упоминаете, что Ваш папа использовал инструмент публикации веб-сайта.

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

Он должен видеть, существует ли различный метод входа в систему к его серверу, чем простой FTP, хотя... это не очень безопасно, потому что это отправляет его пароль как открытый текст по Интернету.

5
ответ дан 29 November 2019 в 20:51
поделиться

С паролем из шести слов он мог быть взломан. Это более вероятно, чем его ftp, перехваченный, но это может быть и так.

Начните с более надежного пароля. (8 символов все еще довольно слабые)

Посмотрите, полезна ли эта ссылка на интернет-блог безопасности .

3
ответ дан 29 November 2019 в 20:51
поделиться

Является сайт просто статическим HTML? т.е. ему не удалось кодировать себя страница загрузки, которая разрешает кому-либо управляющему загрузить поставившие под угрозу сценарии/страницы?

, Почему бы не спросить webhost4life, если они имеют какие-либо журналы FTP в наличии и сообщают о проблеме им. Вы никогда не знаете, они могут быть довольно восприимчивыми и узнать для Вас точно, что произошло?

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

2
ответ дан 29 November 2019 в 20:51
поделиться

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

0
ответ дан 29 November 2019 в 20:51
поделиться

Это недавно произошло с моим клиентом, который был размещен на ipower. Я не уверен, была ли ваша хостинговая среда базирующейся на Apache, но если это было обязательно, дважды проверьте файлы .htaccess, которые вы не создали, особенно над webroot и внутри каталогов изображений, так как они имеют тенденцию вносить некоторую злобу туда а также (они перенаправляли людей в зависимости от того, откуда они пришли в ссылке). Также проверьте все, что вы создали для кода, который вы не написали.

0
ответ дан 29 November 2019 в 20:51
поделиться

Похоже, нас взломали те же парни! Или боты, в нашем случае. Они использовали SQL-инъекцию в URL на некоторых старых классических сайтах ASP, которые больше никто не поддерживает. Мы нашли атакующие IP-адреса и заблокировали их в IIS. Теперь мы должны провести рефакторинг всего старого ASP. Поэтому я советую сначала посмотреть журналы IIS, чтобы выяснить, есть ли проблема в коде вашего сайта или в конфигурации сервера.

-1
ответ дан 29 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: