это небезопасно выставлять мой процесс создания файлов cookie?

0

В моем проекте, в некоторых местах, мне нужно создать cookie через javascript. Я попытался написать очень развязанный процесс, и в итоге я получил сервис symfony:

<?php

namespace Evo\SecurityBundle\Service;

use Symfony\Component\HttpFoundation\Response;

class Cookie
{
    /**
     * @var
     */
    protected $cookiesParams;

    /**
     * Constructor
     *
     * @param $cookiesParams
     */
    public function __construct($cookiesParams)
    {
        $this->cookiesParams = $cookiesParams;
    }

    /**
     * Création de cookie interne
     *
     * @param $name
     * @param $value
     * @param null $expire
     * @param string $path
     * @param null $domain
     * @param bool $secure
     * @param bool $httponly
     * @return Response
     */
    public function setInternalCookie($name, $value, $expire = null, $path = '/', $domain = null, $secure = false, $httponly = true)
    {
        $response = array();

        if( isset($_COOKIE['accept-cookies']) ) {
            $response['success'] = true;
            $response['existed'] = true;
        }
        else {
            $response['success'] = true;
            $response['existed'] = false;
        }

        if( !isset($_COOKIE['accept-cookies']) ) {
            if( is_null($expire) ) {
                $expire = strtotime('+' . $this->cookiesParams['max_lifetime']);
            }
            if( is_null($domain) ) {
                $domain = $_SERVER['SERVER_NAME'];
            }
            $cookieSet = setcookie($name, $value, $expire, $path, $domain, $secure, $httponly);

            $response['success'] = $cookieSet;
            $response['set'] = $cookieSet;
        }

        return new Response(json_encode($response));
    }

}

Большую часть времени я звоню в контроллер на PHP, поэтому ничего не отображается. Но в каком-то месте мне нужно создать свой файл cookie с помощью javascript. Поэтому я написал контрольное действие, получающее параметры, и вызвал мою службу Cookie. Мой контроллер выглядит так:

<?php

namespace Evo\SecurityBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class CookieController extends Controller
{
    /**
     * Créé un cookie interne, via le service de Cookie
     *
     * @param Request $request
     * @return Response
     */
    public function setInternalCookieAction(Request $request)
    {
        try {
            if(!$request->request->has('name') || !$request->request->has('value')) {
                throw new \Exception('Mandatory cookie parameter missing.');
            }

            $cookieService = $this->container->get('security.cookie');
            $response = $cookieService->setInternalCookie('accept-cookies', 1);
        }
        catch(\Exception $e) {
            $response = new Response(json_encode(array('success' => false, 'error' => $e->getMessage())));
        }
        return $response;
    }
}

И я называю это AJAX следующим:

// set cookie via ajax call
$.ajax({
    type: "POST",
    url: "/set-internal-cookie",
    data: {'name': 'cookie-name', value: 'cookie-value'}
    dataType: 'json'
});

С помощью этого процесса кто-то может легко найти, как создать пользовательский cookie. Это небезопасно?

Теги:
security
cookies

1 ответ

1

Хороший процесс безопасности всегда открыт. Безопасность безвестности, хотя иногда и полезная, не считается хорошей стратегией.

Тем не менее: вы должны убедиться, что полностью подверженный влиянию emchanism все еще не может быть скомпрометирован (или не разумно, в зависимости от ваших потребностей безопасности), например, с помощью достаточно безопасного шифрования или другого процесса проверки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню