С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: Фреймворки
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 1
Регистрация: 21.02.2010
Сообщений: 351

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

11.01.2017, 11:40. Показов 1048. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.01.2017, 11:40
Ответы с готовыми решениями:

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

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

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

1
14 / 50 / 3
Регистрация: 26.12.2009
Сообщений: 406
13.01.2017, 11:38
Ну так ищите причину, почему отдало 403 ошибку.
Сравните запросы, которые уходят на сервер в обоих вариантах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.01.2017, 11:38
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru