function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
let randomItem = getRandomArbitrary(0,3)
randomItem // вывод: 0.6108746700365573
document.getElementsByClassName('.music')[randomItem] // undefined
return Math.floor(min + Math.random() * (max + 1 - min))
примерно решает вашу проблему (где min = 0, max =2) img
обязательно должен быть атрибут alt
, недопустимы пустые свойства в css
, очень желательно использовать все теги заголовков h1-h6
и причем h1
должен быть всего 1 на странице, теги h2-h6
не должны быть выше такогоже тега, но с числом меньшим (к примеру тег h3
не должен быть в DOM выше, чем h2
и т.д.) и множество множество что ещёСообщаю. была найдена в блочном редакторе XXS уязвимость. У нас работает Wallarm https://wallarm.com/ и мы платим им постоянно за его работу.
Произошла SQL инъекция, и Wallarm ее не заметил.
Злоумышленник смог добавить в свой аккаунт через нее подтвержденные адреса ( и на вашем домене в том числе) и поставить себе большой кредитный лимит, а так же изменил уровень попадания на модерацию до full trust ( то есть мы не проверяем никогда, кроме spam trap адресов ).
В ночь, когда работает только один сотрудник ( так как больше не требуется ) злоумышленник зарегистрировал аккаунт на сервисе esputnik , там разместил html файл с редиректом на сайт vsegdaplus.ru . Потом он зашел в свой аккаунт с не его подтвержденными адресами и включенным огромным кредитным лимитом и малыми партиями всю ночь до утра слал письма, всего ушло 1,9 млн трафика от 5ти разных доменов. Все одной тематики.
Как мы "залатали": уязвимость найдена и закрыта.
В перечне действий по такому ручному внесению адреса в подтвержденные не для staff аккаунтов установлен блокиратор + уведомление аларм на группу админов.
В Wallarm открыт кейс на расследование по инциденту, так как это их работа выявлять и закрывать нас от таких взломов.
Полученные данные по IP адресам взлома, по домену, на котором располагался вредоносный код и который был использован для инъекции, и другие данные - все поданы в юридический отдел для соответствующей подачи заявления в киберполицию.
HttpWebRequest
и HttpWebResponse
:string urlAddress = "http://google.com";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = null;
if (response.CharacterSet == null)
{
readStream = new StreamReader(receiveStream);
}
else
{
readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
}
string data = readStream.ReadToEnd();
response.Close();
readStream.Close();
}
using System.Net;
using (WebClient client = new WebClient())
{
client .QueryString.Add("ключ", "значение"); //для get
string htmlCode = client.DownloadString("http://somesite.com/index.html");
}
//post запрос:
string url = "http://site.com/";
using (var webClient = new WebClient())
{
// Создаём коллекцию параметров
var pars = new NameValueCollection();
// Добавляем необходимые параметры в виде пар ключ, значение
pars.Add("ключ", "значение");
// Посылаем параметры на сервер
// Может быть ответ в виде массива байт
var response = webClient.UploadValues(url, pars);
}
using mshtml;
HTMLDocument doc = new HTMLDocument();
IHTMLDocument2 doc2 = (IHTMLDocument2)doc;
doc2.clear();
doc2.write(//тут html-код (string));
IHTMLDocument3 doc3 = (IHTMLDocument3)doc2;
IHTMLElement btns = doc3.getElementById("YouId or ne YouId");
IHTMLElementCollection buttons = btns.all;
foreach (IHTMLElement element in buttons )
{
element.click();
}
$(document).ready(function(){ .... });
$(document).ready(function() {
$("head").append("<link rel='stylesheet' type='text/css' href='/styles.css' />");
})
<script type="text/javascript">
var head = document.head
, link = document.createElement('link');
link.type = 'text/css';
link.rel = 'stylesheet';
link.href = '{{ css_file }}';
head.appendChild(link);
</script>