minor
This commit is contained in:
parent
cfe125bc7d
commit
7fccd9546e
3 changed files with 8 additions and 9 deletions
|
@ -14,7 +14,7 @@
|
||||||
<li>Элемент при переносе, даже при резких движениях мышкой, не должен попасть вне окна.</li>
|
<li>Элемент при переносе, даже при резких движениях мышкой, не должен попасть вне окна.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
Футбольное поле в этой задач слишком большое, чтобы показывать его здесь, поэтому откройте его, кликнув по ссылке ниже. Там же и подробное описание задачи (осторожно, винни-пух и супергерои!).
|
Футбольное поле в этой задаче слишком большое, чтобы показывать его здесь, поэтому откройте его, кликнув по ссылке ниже. Там же и подробное описание задачи (осторожно, винни-пух и супергерои!).
|
||||||
|
|
||||||
[demo src="solution"]
|
[demo src="solution"]
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Атака CSRF
|
# Атака CSRF
|
||||||
|
|
||||||
Нельзя говорить про AJAX и не упомянуть про важнейшую деталь его реализации -- анти-CSRF.
|
Нельзя говорить про AJAX и не упомянуть про важнейшую деталь его реализации -- защиту от CSRF-атак.
|
||||||
|
|
||||||
[CSRF](http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D0%BB%D0%BA%D0%B0_%D0%BC%D0%B5%D0%B6%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D1%8B%D1%85_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2) (Cross-Site Request Forgery, также XSRF) -- опаснейшая атака, которая приводит к тому, что хакер может выполнить на неподготовленном сайте массу различных действий от имени других, зарегистрированных посетителей.
|
[CSRF](http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D0%BB%D0%BA%D0%B0_%D0%BC%D0%B5%D0%B6%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D1%8B%D1%85_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2) (Cross-Site Request Forgery, также XSRF) -- опаснейшая атака, которая приводит к тому, что хакер может выполнить на неподготовленном сайте массу различных действий от имени других, зарегистрированных посетителей.
|
||||||
|
|
||||||
|
@ -136,6 +136,3 @@ if (csrfCookie) {
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
Чтобы
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -118,7 +118,7 @@ function upload(file) {
|
||||||
|
|
||||||
Этот код отправит файл на сервер и будет сообщать о прогрессе при его закачке (`xhr.upload.onprogress`), а также об окончании запроса (`xhr.onload`, `xhr.onerror`).
|
Этот код отправит файл на сервер и будет сообщать о прогрессе при его закачке (`xhr.upload.onprogress`), а также об окончании запроса (`xhr.onload`, `xhr.onerror`).
|
||||||
|
|
||||||
Полный пример, основанный на коде выше:
|
Полный пример индикации прогресса при загрузке, основанный на коде выше:
|
||||||
|
|
||||||
[codetabs src="progress"]
|
[codetabs src="progress"]
|
||||||
|
|
||||||
|
@ -158,9 +158,11 @@ function upload(file) {
|
||||||
|
|
||||||
Это обозначено в [спецификации progress notifications](http://www.w3.org/TR/XMLHttpRequest/#make-progress-notifications).
|
Это обозначено в [спецификации progress notifications](http://www.w3.org/TR/XMLHttpRequest/#make-progress-notifications).
|
||||||
</li>
|
</li>
|
||||||
<li>**В процессе получения данных, ещё до их полной передачи, доступен `xhr.responseText`.**
|
<li>**В процессе получения данных, ещё до их полной передачи, доступен `xhr.responseText`, но он не обязательно содержит корректную строку.**
|
||||||
|
|
||||||
Можно до окончания запроса заглянуть в него и прочитать текущие полученные данные. Важно, что при пересылке строки в кодировке UTF-8 русские символы кодируются 2 байтами. Возможно, что в конце одного пакета данных окажется первая половинка символа, а в начале следующего -- вторая. Поэтому полагаться на то, что до окончания запроса в `responoseText` находится корректная строка нельзя. Исключение -- заведомо однобайтные символы, например цифры.</li>
|
Можно до окончания запроса заглянуть в него и прочитать текущие полученные данные. Важно, что при пересылке строки в кодировке UTF-8 кириллические символы, как, впрочем, и многие другие, кодируются 2 байтами. Возможно, что в конце одного пакета данных окажется первая половинка символа, а в начале следующего -- вторая. Поэтому полагаться на то, что до окончания запроса в `responoseText` находится корректная строка нельзя. Она может быть обрезана посередине символа.
|
||||||
|
|
||||||
|
Исключение -- заведомо однобайтные символы, например цифры или латинница.</li>
|
||||||
<li>**Сработавшее событие `xhr.upload.onprogress` не гарантирует, что данные дошли.**
|
<li>**Сработавшее событие `xhr.upload.onprogress` не гарантирует, что данные дошли.**
|
||||||
|
|
||||||
Событие `xhr.upload.onprogress` срабатывает, когда данные отправлены браузером. Но оно не гарантирует, что сервер получил, обработал и записал данные на диск. Он говорит лишь о самом факте отправки.
|
Событие `xhr.upload.onprogress` срабатывает, когда данные отправлены браузером. Но оно не гарантирует, что сервер получил, обработал и записал данные на диск. Он говорит лишь о самом факте отправки.
|
||||||
|
@ -185,5 +187,5 @@ formData.append("myfile", file);
|
||||||
xhr.send(formData);
|
xhr.send(formData);
|
||||||
```
|
```
|
||||||
|
|
||||||
Данные будут отправлены в кодировке `multipart/form-data`. Серверный фреймворк увидит это как обычную форму с файлом. Практически все серверные технологии имеют их встроенную поддержку.
|
Данные будут отправлены в кодировке `multipart/form-data`. Серверный фреймворк увидит это как обычную форму с файлом, практически все серверные технологии имеют их встроенную поддержку. Индикация прогресса реализуется точно так же.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue