�Ự�������

�Ự��ȫ

�Ựģ���޷���֤��洢�ڻỰ�е���Ϣֻ�ܱ������Ự���û����˿ɼ��� ����Ҫ��ȡ������ֶ���ȷ���Ự�еĻ�����Ϣ�� ���ڲ�ȡ���ַ�ʽ������������Ϣ�� ȡ�������ڻỰ�д洢�����ݡ�

�����Ự�д洢�����ݵ���Ҫ�ԣ� �Լ�Ϊ�����Ӷ���ı������ƣ� ͨ����Ҫ����һ���Ĵ��ۣ�ͬʱ�ή�ͱ����ԡ� ���磬�������Ҫ�����û�������Ṥ��ѧ������ ����Ҫ���� session.use_only_cookies ѡ� ���Ҫ���û���ʹ�ù����У���������������Ϊ���� cookie�� ������޷�����ʹ�ûỰ�����ˡ�

�кܶ��ַ�ʽ�����Ե��»Ự ID ��й¶���������� ���磬JavaScript ע�룬URL �а����Ự ID�����ݰ������� ����ֱ�ӷ�����������豸�ȡ� ����Ự ID ��й©���������� ��ô���ǾͿ��Է�������Ự ID ���Է��ʵ�ȫ����Դ�� ���ȣ������ URL �а����˻Ự ID�� ���ҷ������ⲿ��վ�㣬 ��ô��ĻỰ ID �������ⲿվ��ķ�����־�б���¼��referrer ����ͷ���� ���⣬������Ҳ���Լ����������ͨ�ţ����ͨ��δ���ܣ� ��ô�Ự ID �����������������ĵ���ʽ���д��䡣 �����������Ľ�����������ڷ�������� SSL/TLS�� ���⣬ʹ�� HSTS ���Դﵽ���ߵİ�ȫ�ԡ�

Note: ��ʹʹ�� HTTPS Э�飬Ҳ�޷���Զ��֤�������ݲ���й©�� ���磬CRIME �� BEAST ©������ʹ�ù����߶�ȡ��������ݡ� ���⣬��������ͨ�����Ŀ�ģ��ܶ������ж����� HTTPS MITM ���� ���Զ�ȡ HTTPS Э���µ�ͨ�����ݡ� ��ô������Ҳ���Դ���ƵĴ����������������ȡ HTTPS Э���µ�ͨ�����ݡ�

�ϸ�Ự����

Ŀǰ��Ĭ������£�PHP ��������Ӧ�ķ�ʽ������Ự�ģ� ���ַ�ʽʹ��������������ͬ��Ҳ������һ���ķ��ա�

�� PHP 5.5.2 ��ʼ����������һ������� session.use_strict_mode�� �����������������������õĻỰ�洢��֧�ֵĻ���δ����ʼ���ĻỰ ID �ᱻ�ܾ��� ��Ϊ������һ��ȫ�µĻỰ������Ա��⹥����ʹ��һ����֪�ĻỰ ID �����й����� ���磬�����߿���ͨ���ʼ����ܺ��߷���һ�������Ự ID �����ӣ� http://example.com/page.php?PHPSESSID=123456789�� ��������� session.use_trans_sid ����� ��ô�ܺ��߽���ʹ�ù��������ṩ�ĻỰ ID ��ʼһ���µĻỰ�� ��������� session.use_strict_mode ѡ��Ϳ��Խ��ͷ��ա�

Warning

�û��Զ���ĻỰ�洢��Ҳ����ͨ��ʵ�ֻỰ ID ��֤��֧���ϸ�Ựģʽ�� �����û���ʵ���Լ��ĻỰ�洢����ʱ�� һ��Ҫ�ԻỰ ID �ĺϷ��Խ�����֤��

�������һ�࣬����Ϊ��������Ự ID �� cookie ������·���� ������ HTTP ���ʣ�����ʹ�� HTTPS ���ʵȰ�ȫ���ԣ� �����߿����������������Щ�������������ÿ��õĻỰ ID�� �������� session.use_only_cookies ������ �޷����������⡣�� session.use_strict_mode ������ ���Խ������ַ��ա����� session.use_strict_mode=On�� ���ܾ�δ����ʼ���ĻỰ ID��

Note: ��Ȼʹ�� session.use_strict_mode ������ ���Խ������Ự����ʽ�������ķ��գ� �����߻���ͨ������ JavaScript ע����ֶΣ� ǿ���û�ʹ���ɹ����ߴ����IJ��Ҿ����������ij�ʼ���ĻỰ ID�� ��ν������ַ��򣬿��Բο����ֲ�Ľ��鲿�֡� ������Ѿ������� session.use_strict_mode ����� ͬʱʹ�û���ʱ����ĻỰ���� ����ͨ������ session_regenerate_id() ������ ���������ɻỰ ID�� ��ô�����������ɵĻỰ ID �Ϳ��Ա�ɾ�����ˡ� �������Թ��ڻỰ���ʵ�ʱ�� ��Ӧ�ñ����Ծ�Ự���������ݣ� �Ա���������ʹ�á� Ȼ�����û��˳���ǰ�ĻỰ���������µ�¼�� ��ֹ�����߼���ʹ��"͵"���ĻỰ��

Warning

�Թ��ڻỰ���ݵķ��ʲ���������ζ���������ܹ����� ���ȶ�������״�������߲���ȷ�ĻỰɾ����Ϊ�� ���ᵼ�ºϷ����û������Թ��ڻỰ���ݷ�����Ϊ��

�� PHP 7.1.0 ��ʼ�������� session_create_id() ������ ����������������ڻỰ ID �������û� ID ��Ϊǰ׺�� ��ȷ���û����ʵ���ȷ��Ӧ�ĻỰ���ݡ� Ҫʹ����������� ��ȷ�������� session.use_strict_mode ����� ��������û����ܻ�α�������û��ĻỰ ID��

Note: ���� PHP 7.1.0 ֮ǰ���û���Ӧ��ʹ�� CSPRNG������ /dev/urandom�� ���� random_bytes() �����Լ���ϣ���� �������µĻỰ ID�� session_create_id() �������������ײ���������� ���Ҹ��� INI �ļ��кͻỰ��ص������������ɻỰ ID�� ���ԣ�����ʹ�� session_create_id() ���������ɻỰ ID��

�������ɻỰ ID

��Ȼ session.use_strict_mode ��������Խ��ͷ��գ����ǻ�������Ϊ��ȷ���Ự��ȫ�������߻���Ҫʹ�� session_regenerate_id() ������

�Ự ID �������ƿ�����Ч�Ľ��ͻỰ����ȡ�ķ��գ� ���ԣ����������Եĵ��� session_regenerate_id() ���� ���������ɻỰ ID�� ���磬���ڻ������ݣ�ÿ�� 15 ���Ӿ��������ɻỰ ID�� ����һ������ʹ�Ự ID ����ȡ����ô���������õ��ĻỰ ID Ҳ��ܿ�Ĺ��ڣ� ������ǽ�һ�����ʣ��ͻ�����Թ��ڻỰ���ݷ��ʵĴ���

���û��ɹ�ͨ����֤֮�󣬱���Ϊ���������ɻỰ ID�� ���ң��������� $_SESSION �б����û���֤��Ϣ֮ǰ ���� session_regenerate_id() ������ �� PHP 7.0.0 ��ʼ��session_regenerate_id() ���� ���Զ����浱ǰ�Ự���ݣ��Ա��ڱ���ʱ�������Ϣ����ǰ�Ự���� ��ȷ��ֻ���µĻỰ�����û���֤��Ϣ��

�����߲�Ҫ���� session.gc_maxlifetime ����� ��Ϊ�����߿������ܺ��ߵĻỰ����֮ǰ�������ʣ� ����ά������Ự�Ļ�� �Ա�֤����Ự������ڡ�

ʵ���ϣ�����Ҫ�Լ�ʵ�ֻ���ʱ����� �Ự���ݹ�����ơ�

Warning

��Ȼ�Ự����������͸���Ĺ���ʱ����� �������������δ������ʵ�֡� �� GC ����֮ǰ���ɵĻỰ���ݻ��ñ��棬 ͬʱ�������߻��ñ�֤���ڵĻỰ�����Ѿ����Ƴ��� ���ǣ��������ֲ��������Ƴ���Ծ�Ự�е����ݡ� ���ԣ���Ҫ�ڻ�Ծ�Ự�ϵ��� session_regenerate_id(true); �� session_destroy() ������ ���������е������ì�ܣ�������ʵ�ϱ������ô����

Ĭ������£�session_regenerate_id() ���� ����ɾ���ɵĻỰ�� ���Լ�ʹ�����˻Ự ID���ɵĻỰ���ܻ��ǿ��õġ� ��������Ҫʹ��ʱ����Ȼ��ƣ� ��ȷ���ɵĻỰ���ݲ����ٴα����ʡ�

Warning

����ɾ����Ծ�Ự���ܻ������Ԥ�ڵ�һЩӰ�졣 ���磬������״̬���ȶ��������в������󵽴� Web ������������£� ����ɾ����Ծ�Ự���ܵ��¸�������ỰʧЧ�����⡣

����ɾ����Ծ�ỰҲ �޷������ܴ��ڵĶ�����ʡ�

��Ϊ��������� ��Ҫ�� $_SESSION ������һ���̵ܶĹ���ʱ�䣬 Ȼ��������ʱ������жϺ����ķ����DZ�����Ļ��DZ���ֹ�ġ�

�ڵ��� session_regenerate_id() ����֮�� ����������ֹ�ԾɵĻỰ���ݵķ��ʣ�Ӧ����һС��֮��֮���ٽ�ֹ���ʡ� ���磬���ȶ������������£���������Ϊ�����ӣ� �ڲ��ȶ������������£���������Ϊ�����ӡ�

����û������˾ɵĻỰ���ݣ��Ѿ����ڵģ��� ��ôӦ�ý�ֹ���ʡ� ����ӻỰ���Ƴ�����û�����֤��Ϣ����Ϊ�⿴�������������ܹ�����

��������������˲���ɾ���� cookie����ôʹ�� session.use_only_cookies �� session_regenerate_id() �ᵼ�������û����ܾܾ���������⡣ ���������������������û�ɾ�� cookie ���Ҿ����û�����������һЩ��ȫ���⡣ �����߿���ͨ������� Web Ӧ�á����������Լ��԰�ȫ�Խϲ�������豸���й��� ��α������ cookie��

Warning

�����������ľܾ����񹥻�������ָ�ĺ��塣 ͨ��������Ҫ�����Ự ID �İ�ȫ��use_strict_mode=On �DZ���Ҫ���ġ� �������е�վ�㶼���� use_strict_mode=On��

ֻ�е��˺Ŵ��ڱ�������ʱ�� �Żᷢ���ܾ���������⡣ ͨ����������Ӧ���б�ע���˶���� JavaScript �Żᵼ��������⡣

�Ự�����ݵ�ɾ��

���ڵĻỰ�е�����Ӧ���DZ�ɾ���ģ����Ҳ��ɷ��ʡ� ���ڵĻỰģ����δ�ܺõ�֧���������ԡ�

Ӧ�þ����ܿ��ɾ�����ڻỰ�е����ݡ� ���ǣ���Ծ�Ựһ����Ҫ����ɾ���� Ϊ���ܹ�ͬʱ����������Ҫ�� ����Ҫ�Լ���ʵ�ֻ���ʱ����ĻỰ���ݹ�����ơ�

�� $_SESSION �����ûỰ����ʱ��������Ҷ�����й��� �Ա��ܹ���ֹ���ڹ��ڻỰ�ķ��ʡ� ���������ڹ��ڻỰ�ķ���ʱ�����������û������лỰ��ɾ����֤��Ϣ�� ����Ҫ���û�������֤�� ���ڹ��ڻỰ���ݵķ��ʿ�����һ�ֹ�����Ϊ�� Ϊ�˱����Ự���ݣ�����Ҫ׷��ÿ���û��Ļ�Ծ�Ự��

Note: ���û����ڲ��ȶ������磬���� web Ӧ�ô��ڲ����������ʱ�� Ҳ���ܷ������ڹ��ڻỰ���ݵķ��ʡ� ����������Ϊ�û������µĻỰ ID�� ���Ǻܿ�����������ԭ�򣬵��� Set-Cookie �����ݰ��޷������û���������� ��ͨ�� session_regenerate_id() ���� Ϊһ�����������µĻỰ ID ֮�������IJ������ӿ�����δ�õ�����µĻỰ ID�� ��ˣ�����������ֹ���ڹ��ڻỰ���ݵķ��ʣ�����Ҫ�ӳ�һ����С��ʱ��Σ� �����Ϊʲô������Ҫʵ�ֻ���ʱ����ĻỰ����

�����֮����Ҫ�ڵ��� session_regenerate_id() ���� session_destroy() ������ʱ������ɾ���ɵĻỰ���ݣ� ����Ҫͨ��һ��ʱ��������ƺ�����������ɻỰ���ݵķ��ʡ� �ӻỰ�洢��ɾ�����ݵĹ������� session_gc() ��������ɰɡ�

�Ự������

Ĭ������£�Ϊ�˱�֤�Ự�����ڶ������֮���һ���ԣ� ���ڻỰ���ݵķ����Ǽ������еġ�

���ǣ�������������Ҳ�ᵼ�±����������ã������ж����û��ľܾ����񹥻��� Ϊ�˽������ַ��գ����ڷ��ʻỰ���ݵ�ʱ�򣬾����ܵ�����������ʱ�䡣 ��ij��������Ҫ���»Ự���ݵ�ʱ��ʹ��ֻ��ģʽ���ʻỰ���ݡ� Ҳ����˵���ڵ��� session_start() ������ʱ�� ʹ�� 'read_and_close' ѡ�session_start(['read_and_close'=>1]);�� ���⣬�����Ҫ���»Ự���ݣ���ô�ڸ������֮�� ���ϵ��� session_commit() �������ͷŶ��ڻỰ���ݵ�����

���Ự����Ծ��ʱ�򣬵�ǰ�ĻỰģ�鲻������� $_SESSION ���޸ġ� ����Ҫ�Լ�����֤ �ڻỰ���ڲ���Ծ״̬��ʱ�򣬲�Ҫȥ�޸�����

��Ծ�Ự

��������Ҫ�Լ���׷��ÿ���û��Ļ�Ծ�Ự�� Ҫ֪��ÿ���û������˶��ٻ�Ծ�Ự��ÿ����Ծ�Ự�����Ǹ� IP ��ַ�� ��Ծ�˶೤ʱ��ȡ�PHP �����Զ�������������Ҫ����������ɡ�

�кܶ��ַ�ʽ��������׷���û��Ļ�Ծ�Ự�� �����ͨ�������ݿ��д洢�Ự��Ϣ�������û��Ự�� ���ڻỰ�ǿ��Ա������ռ����ռ����ģ� ������Ҳ��Ҫ�����ռ����ĻỰ���ݣ��Ա�֤���ݿ��е����ݺ���ʵ�Ļ�Ծ�Ự���ݵ�һ���ԡ�

һ�ֺܼ򵥵ķ�ʽ����ʹ��"ʹ���û� ID ��Ϊ�Ự ID ǰ׺"�����ұ����Ҫ����Ϣ�� $_SESSION �С� �󲿷ֵ����ݿ��Ʒ�����ַ���ǰ׺��ѯ����ע��Ҳ����ģ����ѯ�������������������кܺõ����ܱ��֡� Ϊ��ʵ�����ַ�ʽ������ʹ�� session_regenerate_id() �� session_create_id() ������

Warning

��Զ��Ҫʹ�û���������Ϊ�Ự ID ǰ׺�� ����û� ID ���ڻ������ݣ���ô���Կ���ʹ�� hash_hmac() �����������ժҪ����ʹ�á�

Warning

�������� session.use_strict_mode ����� ��ȷ���Ѿ����ã� �����Ծ�Ự���ݿ���ܻᱻ���֡�

Ҫ�ܹ������ڹ��ڻỰ���ݵķ��ʣ� ����ʱ����ĻỰ���ݹ�������DZز����ٵġ� ����⵽���ڹ��ڻỰ���ݵķ���ʱ����Ӧ�ô�����û��Ļ�Ծ�Ự��ɾ����֤��Ϣ�� ���⹥���߳���ʹ�õ�ȡ�ĻỰ��

�Ự���Զ���¼

�����߲�Ӧ��ͨ��ʹ�ó��������ڵĻỰ ID ��ʵ���Զ���¼���ܣ� ��Ϊ���ַ�ʽ����˻Ự����ȡ�ķ��ա� ������Ӧ���Լ�ʵ���Զ���¼�Ļ��ơ�

��ʹ�� setcookie() ��ʱ�򣬴��밲ȫ��һ����ժҪ�����Ϊ�Զ���¼��Ϣ�� ����ʹ�ñ� SHA-2 ����ǿ�ȵ�ժҪ�㷨������ SHA-256�� �� random_bytes() ������ɵ����� ��Ҳ���Զ�ȡ /dev/urandom ��𣩽���ժҪ��Ϊ�Զ���¼����Ϣ��

���û����ʵ�ʱ����������û���δ��֤�� ��ô��ȥ����������Ƿ��������Ч��һ���Ե�¼��Ϣ�� ���������Ч��һ���Ե�¼��Ϣ����ô��ȥ��֤�û��� �������������µ�һ���Ե�¼��Ϣ�� �Զ���¼�Ĺؼ���Ϣһ����ֻ��ʹ��һ�Σ���Զ��Ҫ�ظ�ʹ��һ���Ե�¼��Ϣ��

�Զ���¼��Ϣ�dz��������ڵ���֤��Ϣ�� ���Ա���Ҫ�����ܵ����Ʊ����� ���Զ����Զ���¼��Ϣ��Ӧ�� cookie ����·���������� HTTP ���ʡ�������ȫ���� �����������Ա��������Ҿ��ڱ�Ҫ��ʱ��Ŵ������ cookie��

������ҲҪ�ṩ�����Զ���¼�Ļ��ƣ� �Լ�ɾ��������Ҫ���Զ���¼���ݵ�������

CSRF����վ����α�죩

�Ự����֤�޷������վ����α�칥���� ��������Ҫ�Լ���ʵ�ֱ���Ӧ�ò��� CSRF �����Ĺ��ܡ�

output_add_rewrite_var() ������������ ����Ӧ������ CSRF ������������Ϣ��ο��ĵ���

Note: PHP prior to 7.2.0 uses the same output buffer and INI setting as trans sid�� ���Բ������� PHP 7.2.0 ֮ǰʹ�� output_add_rewrite_var() ������

�󲿷� Web Ӧ�ÿ�ܶ��ṩ�� CSRF ���������ԡ� ��ϸ��Ϣ��ο������õ� Web ��ܵ��ĵ���