Как использовать HttpOnly куки - PullRequest
0 голосов
/ 08 апреля 2020

Я понял цель повара ie httpOnly, эта система защищена от повара ie еще потому, что мы не можем использовать document.cook ie для получения информации о файлах cookie (например, атака XSS).

Я сделал PO C с flask и PHP, чтобы применить эту концепцию.

  1. Я сделал запрос POST и сервер создал response.set_cook ie с httpOnly:
@app.route('/api/connexion', methods=['POST'])
def conn():
    login = request.form["login"]
    password = request.form["password"]
    response = make_response(jsonify({
        'login':login,
        'password': password
    }))
    response.set_cookie('token', 't1',httponly=True)
    return response
С помощью кода php я отправляю запрос и получаю ответ, но как я могу сохранить файлы cookie, чтобы использовать их в другом запросе с другим вызовом API?

php код:

myForm = document.getElementById("myForm")
    myForm.addEventListener('submit', (e) => {
        console.log("in event");
        e.preventDefault();
        let form = new FormData(myForm);
        fetch("http://127.0.0.1:8000/api/connexion",{
            method:'POST',
            body:form
        }).then((response) => {
            return response.json();
        }).then((text)=> {
            console.log(text);
        })

    })

Итак, вопрос: нужно ли мне получить повара ie и сохранить его вручную, или повар ie будет отправлять автоматически при каждом запросе, и я хотел бы понять, как.

Большое спасибо.

1 Ответ

0 голосов
/ 09 апреля 2020

Браузер сохраняет куки автоматически, если дата в будущем. После того, как дата пройдена, браузер «бросит» повара ie и прекратит его использовать. Это хорошая практика * от 1002 * до добавление срока годности вашему повару ie

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

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

Как автоматически отправлять файлы cookie домена с помощью запроса на выборку

Когда вы создавая новый запрос на выборку, убедитесь, что у вас есть {"credentials":"same-origin"} внутри вашего объекта init.

В вашем коде это должно выглядеть так:
myForm = document.getElementById("myForm")
myForm.addEventListener('submit', (e)=>{
    console.log("in event");
    e.preventDefault();
    let form = new FormData(myForm);
    let fetchInitObject = {
        method: 'POST',
        body: form,
        /*
        The following line will tell the browser 
        to send all the cookies of the site in the URL, as long as 
        the url and the site that runs the Javascript code are from the same origin
        In your example - the side that runs the javascript code, should be 127.0.0.1 in port 8000, without http
        */
        credentials: 'same-origin'
    };
    fetch("http://127.0.0.1:8000/api/connexion", fetchInitObject).then((response)=>{
        return response.json();
    }
    ).then((text)=>{
        console.log(text);
    }
    )

}
)
...