01/10/2018, 16:55

Kiểm tra website tích hợp SSL trong PHP

Nếu bạn chưa biết SSL là gì thì bạn có thể xem định nghĩa về SSL. SSL là gì? Xét ở góc độ kỹ thuật thì một hệ thống website có và không sử dụng SSL có gì khác nhau không? Một hệ thống website khi được tích hợp SSL thì nó có một số đặc điểm sau đây. Giao thức HTTPS : Có nghĩa là khi truy ...

Nếu bạn chưa biết SSL là gì thì bạn có thể xem định nghĩa về SSL. SSL là gì?

Xét ở góc độ kỹ thuật thì một hệ thống website có và không sử dụng SSL có gì khác nhau không?

Một hệ thống website khi được tích hợp SSL thì nó có một số đặc điểm sau đây.

  • Giao thức HTTPS: Có nghĩa là khi truy cập vào webiste thì thay vì bạn gõ giao thức http:// thông thường thì giờ đây bạn phải gõ https://
  • Source code của bạn phải được upload vào thư mục private_html.

Chính vì lý do đó khi bạn xây dựng website mà quên không có cơ chế để hệ thống tự kiểm tra xem hệ thống có tích hợp SSL hay không? Thay vì bạn phải khai báo SITE_URL là https://example.com thì bạn lại khai báo http://example.com.

Nói chung thì trong các Framework như CI, Laravel, Yii đều có sẵn phương thức này rồi.Nhưng nếu bạn đang tự xây dựng một CMS thì bạn có thể tham khảo một số các phương thức sau:

function is_ssl() {
  return
	(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
	|| $_SERVER['SERVER_PORT'] == 443;
}

Hoặc nếu bạn có nghiên cứu WordPress thì trong core của nó cũng có một hàm dùng để kiểm tra SSL.

function is_ssl() {
    if ( isset($_SERVER['HTTPS']) ) {
        if ( 'on' == strtolower($_SERVER['HTTPS']) )
            return true;
        if ( '1' == $_SERVER['HTTPS'] )
            return true;
    } elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
        return true;
    }
    return false;
}

Hoặc nếu bạn có ngó qua CI thì bạn cũng thấy trong CI cũng có hàm kiểm tra SSL.

function is_https(){
    if ( ! empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off')
    {
        return TRUE;
    }
    elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https')
    {
        return TRUE;
    }
    elseif ( ! empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off')
    {
        return TRUE;
    }
    return FALSE;
}

Khi bạn muốn khai báo một URL được sử dụng cho toàn hệ thống.

// Định nghĩa SITE_URL
define('SITE_URL',is_ssl()?'https://':'http://'.$_SERVER['HTTP_HOST']);

Tổng kết.

Như vậy mình đã trình bày cách kiểm tra hệ thống website có  tích hợp SSL trong PHP.Hy vọng bài viết sẽ thực sự bổ ích với các bạn.

0