Форум программистов, компьютерный форум, киберфорум
PHP: Фреймворки
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 21.02.2010
Сообщений: 332
1

Срабатывает csrf защита если функция в отдельном js-файле

11.01.2017, 11:40. Показов 607. Ответов 1
Метки нет (Все метки)

Всем привет,
В php/codeigniter/twig/JS проекте нужно передать пару переменных csrf_token_name / csrf_token_hash для выполения POST-запроса :
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    function save_bookmark_to_product() {
        var product_id= $("#hidden_bookmarks_to_product").val()
        var product_bookmark_info= $("#product_bookmark_info").val()
        var is_featured= $("#is_featured").is(':checked')
        var href= " base_url products/save_bookmark_to_product"
        jQuery.ajax({
            url: href,
            type: 'POST',
            data: { product_id : product_id, info : product_bookmark_info, is_featured : ( is_featured ? 'Y' : 'N' ), logged_user_id : ' LoggedUserId ',  csrf_token_name  : ' csrf_token_hash ' },
        dataType: 'json',
            success: function(result) {
            if (result.ErrorCode != 0) {
                alert( result.ErrorMessage )
            }
            if (result.ErrorCode == 0) {
                location.reload();
            }
        }
    });
 
    }
И в исходниках я вижу :
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    function save_bookmark_to_product() {
        var product_id= $("#hidden_bookmarks_to_product").val()
        var product_bookmark_info= $("#product_bookmark_info").val()
        var is_featured= $("#is_featured").is(':checked')
        var href= "http://local-wprods.com/products/save_bookmark_to_product"
        jQuery.ajax({
            url: href,
            type: 'POST',
            data: { product_id : product_id, info : product_bookmark_info, is_featured : ( is_featured ? 'Y' : 'N' ), logged_user_id : '1', csrf_test_name : '41033b3370643982ad5a33cc7e630a7d' },
        dataType: 'json',
            success: function(result) {
            if (result.ErrorCode != 0) {
                alert( result.ErrorMessage )
            }
            if (result.ErrorCode == 0) {
                location.reload();
            }
        }
    });
 
    }
Код выше нормально работает.

Но я хочу вынести все функции в отдельный JS-файл и получаю ошибку.
В twig файле я определяю :
HTML5
1
2
3
4
5
6
7
8
<script type="text/javascript">
    /*<![CDATA[*/
 
    var base_url= ' base_url '
    var logged_user_id = ' LoggedUserId '
    var csrf_token_name = ' csrf_token_name '
    var csrf_token_hash= ' csrf_token_hash '
...
В отдельном file.js с ошибкой эти переменные находит:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 $(function() {
    ...
     alert( "frontend_app.jsbase_url:"+base_url + "  logged_user_id::"+logged_user_id+"  csrf_token_hash::"+csrf_token_hash)  — ВЫВОДЯТСЯ ПРАВИЛЬНЫЕ ЗНАЧЕНИЯ
    fancyBoxInit()
     if ( parseInt(logged_user_id) > 0 ) {
         getCartSummary()
     }
});
 
 
 
 function save_bookmark_to_product() {
     var product_id= $("#hidden_bookmarks_to_product").val()
     var product_bookmark_info= $("#product_bookmark_info").val()
     var is_featured= $("#is_featured").is(':checked')
     var href= " base_url products/save_bookmark_to_product"
     alert( "csrf_token_hash::"+csrf_token_hash )  // ВЫВОДИТ  csrf_token_hash::41033b3370643982ad5a33cc7e630a7d
     jQuery.ajax({
         url: href,
         type: 'POST',
         data: { product_id : product_id, info : product_bookmark_info, is_featured : ( is_featured ? 'Y' : 'N' ), logged_user_id : logged_user_id, csrf_token_name : csrf_token_hash },
     dataType: 'json',
         success: function(result) {
         if (result.ErrorCode != 0) {
             alert( result.ErrorMessage )
         }
         if (result.ErrorCode == 0) {
             location.reload();
         }
     }
 });
 
 }
Но получаю 403 ошибку
Javascript
1
2
An Error Was Encountered
The action you have requested is not allowed.
Не понимаю почему во 2ом случае вызов из отдельного файла вызывает ошибку и в чем разница?

Так:
Javascript
1
csrf_token_hash.toString()
Не помогает ...

Спасибо!
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2017, 11:40
Ответы с готовыми решениями:

Функция в отдельном файле
Всем привет! Учусь писать код в разных файлах, возникла проблема с подобным кодом: main.cpp ...

CSRF защита
Доброе время суток Использую банальную защиту, создал токе записал в сессию, при загрузке страницы...

Защита от CSRF-атак
Как проверить на странице-обработчике, что запрос от AJAX пришёл именно с этого же сайта и...

Защита от CSRF - где хранить хеши?
Хочу реализовать такую защиту. Прочитал литературу, но не много не понял: В ВК, если я хочу...

1
13 / 49 / 3
Регистрация: 26.12.2009
Сообщений: 403
13.01.2017, 11:38 2
Ну так ищите причину, почему отдало 403 ошибку.
Сравните запросы, которые уходят на сервер в обоих вариантах.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2017, 11:38

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как автомат.размножить строки в dbf-файле n-раз если n в отдельном столбце?
В dbf-файле с данными из 3-х тыс. строк есть столбец &quot;количество&quot; с разным целым количеством...

Как в процедуру находящуюся в отдельном файле передать параметры если вызов файла происходит при помощи execute ?
подскажите пожалуйста как в процедуру находящуюся в отдельном файле передать параметры если вызов...

Что возвращает функция в случае, если срабатывает ошибка?
public DataSet Query2b(string query) { if (this.OpenConnection()) ...

Django csrf cookie --нужно определить в чем ошибка CSRF cookie not set
НУжна помощь в определений ошибки как исправить в папке Templates находится файл index.py...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.