it-swarm-vi.com

Triển khai chống giả mạo CSRF bằng cách sử dụng Joomla Framework

Tôi đã sử dụng các phương thức được mô tả trên trang này trong Joomla nhiều lần trước đây:

http://docs.j Joomla.org/How_to_add_CSRF_anti-spaggering_to_forms

Bây giờ tôi muốn thực hiện cùng một cơ chế bằng cách sử dụng Joomla FrameworkỨng dụng khung . Vì vậy, tôi đã thử điều này:

$token = $this->app->getFormToken();

Nhưng điều này khiến ứng dụng thoát ra. Tôi đã xem qua mã và vấn đề bắt đầu trong hàm getFormToken tại đây:

return md5($this->get('secret') . $userId . $this->session->getToken($forceNew));

$ this-> get ('secret') trở lại đây vì không có dấu chấm trong 'secret':

if (!strpos($path, '.'))
{
    return (isset($this->data->$path) && $this->data->$path !== null && $this->data->$path !== '') ? $this->data->$path : $default;
}

Sau đó, chức năng này chạy từ Symfony:

public function write($sessionId, $data)
{
    return (bool) $this->handler->write($sessionId, $data);
}

Và cuối cùng chức năng này chạy:

public function close()
{
    $this->active = false;

    return (bool) $this->handler->close();
}

Mà thoát khỏi ứng dụng.

Tôi đang làm gì sai? Tôi có cần thêm một 'bí mật' ở đâu đó không? Làm cách nào để tạo mã thông báo biểu mẫu mà sau đó tôi sẽ kiểm tra khi biểu mẫu được gửi?

6
Joe P

Cuối cùng tôi đã làm việc đó. Tôi cần tạo một phiên và gán nó cho ứng dụng trước khi getFormToken hoạt động. Vì vậy, trước tiên tôi sử dụng phiên Joomla:

use Joomla\Session\Session;

Sau đó tạo phiên, đặt phiên và nhận mã thông báo biểu mẫu:

$session = Session::getInstance('none');
$this->app->setSession($session);
$token = $this->app->getFormToken();

Dễ dàng khi bạn biết làm thế nào! Tôi mong điều này giúp được người nào khác.

4
Joe P