1
0
mirror of https://github.com/php/doc-ja.git synced 2026-03-24 07:02:08 +01:00
Files
archived-doc-ja/security/variables.xml

113 lines
4.4 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: f0ed705e1ac34fed4c92979f63bee74c382f991b Maintainer: hirokawa Status: ready -->
<chapter xml:id="security.variables" xmlns="http://docbook.org/ns/docbook">
<title>ユーザーが投稿したデータ</title>
<para>
多くの <acronym>PHP</acronym> のプログラムで最も脆弱な部分は、言語自体に起因するものではなく、
単にセキュリティを考慮して書かれていないコードの問題です。そのため、
指定したコードの部分の意味を常に時間をかけて吟味し、
予想外の変数が投稿された場合に有り得る損害を確かめる必要があります。
<example>
<title>危険な変数の使用</title>
<programlisting role="php">
<![CDATA[
<?php
// ユーザーのホームディレクトリからファイルを削除します... または他の誰
// かのディレクトリかも?
unlink ($evil_var);
// 彼らのアクセスのログを書き込む.. または違うかも?
fputs ($fp, $evil_var);
// 何かちょっとしたことを実行.. または rm -rf *?
system ($evil_var);
exec ($evil_var);
?>
]]>
</programlisting>
</example>
常に注意してコードをテストし、Webブラウザから投稿された全ての変数
について次のような点を確認してください。
<itemizedlist>
<listitem>
<simpara>
このスクリプトは、意図したファイルのみを受け付けるか?
</simpara>
</listitem>
<listitem>
<simpara>
例外的なまたは意図したもの以外のデータにより実行することが可能
か?
</simpara>
</listitem>
<listitem>
<simpara>
このスクリプトは意図した以外の方法で使用することが可能か?
</simpara>
</listitem>
<listitem>
<simpara>
このスクリプトは、悪い意味で他のスクリプトと組み合わせて使用す
ることが可能か?
</simpara>
</listitem>
<listitem>
<simpara>
トランザクションは適切に記録されているか?
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
スクリプトを書いた後ではなく、書いている時にこれらの質問を適宜行う
ことにより、セキュリティ改善のために不幸にして書き直しが必要になる
ということを避けることができます。こうした考慮をまず行うことにより、
システムのセキュリティを保証できるわけではありませんが、改善の一助
にはなりえます。
</para>
<para>
入力データの出所や有効性、完全性を曖昧にする便利な設定を無効にし、
セキュリティを強化してください。暗黙的な変数の生成や未検証の入力は、
インジェクション攻撃やデータ操作といった脆弱性につながる可能性があります。
</para>
<para>
かつては <literal>register_globals</literal>
<literal>magic_quotes</literal> (これらは両方、PHP 5.4.0 で削除されています)
のような機能が、ユーザーの入力から自動的に変数を生成したり、
データを不完全な形でエスケープしたりすることで、セキュリティリスクを拡大することに貢献していました。
PHP ではそうしたリスクはなくなったものの、
入力処理の管理を誤れば、同様のリスクは依然として存在します。
</para>
<para>
<link linkend="function.error-reporting">error_reporting(E_ALL)</link>
を有効にし、未初期化の変数を検知し、入力を検証してください。
型安全を強制し、意図しない型変換を防止し、セキュリティ全体を改善するために、
strict モード
(PHP 7 で導入された <link linkend="language.types.declarations.strict">declare(strict_types=1)</link>)
を利用してください。
</para>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->