cvs: phpdoc-cs / language-snippets.ent /security filesystem.xml

[email protected] ("Lukas Jelinek") Sat, 08 Jul 2006 20:23:21 -0000
Newsgroups php.doc.cs
Message-ID <cvsluk1152390201@cvsserver>
luk		Sat Jul  8 20:23:21 2006 UTC

  Added files:                 
    /phpdoc-cs/security	filesystem.xml 

  Modified files:              
    /phpdoc-cs	language-snippets.ent 
  Log:
  
  EN -> CS sync
  
  new translation
  
  
  
http://cvs.php.net/viewvc.cgi/phpdoc-cs/language-snippets.ent?r1=1.32&r2=1.33&diff_format=u
Index: phpdoc-cs/language-snippets.ent
diff -u phpdoc-cs/language-snippets.ent:1.32 phpdoc-cs/language-snippets.ent:1.33
--- phpdoc-cs/language-snippets.ent:1.32	Sun Jun 11 19:06:02 2006
+++ phpdoc-cs/language-snippets.ent	Sat Jul  8 20:23:21 2006
@@ -73,6 +73,14 @@
 </varname>, <varname>$_POST</varname> a <varname>$_SERVER</varname>.
 Pro více informací viz èást manuálu o &link.superglobals;</para></note>'>
 
+<!ENTITY note.timezone-errors '<note><para>
+Od PHP 5.1.0 (kde byly pøepsány funkce pro datum a èas) je pøi ka¾dém zavolání
+funkce pro datum/èas, pokud je èasová zóna neplatná, vygenerována zpráva
+<constant>E_NOTICE</constant>; pokud se pou¾ívá systémové nastavení nebo
+promìnná prostøedí <varname>TZ</varname>, generuje se zpráva
+<constant>E_STRICT</constant>Viz také <function>date_default_timezone_set</function>.
+</para></note>'>
+
 <!ENTITY note.uses-ob '<note><para>Tato funkce vnitønì pou¾ívá výstupní
 bufferování s tímto parametrem a proto ji nelze pou¾ít uvnitø callbacku
 <function>ob_start</function>.</para></note>'>

http://cvs.php.net/viewvc.cgi/phpdoc-cs/security/filesystem.xml?view=markup&rev=1.1
Index: phpdoc-cs/security/filesystem.xml
+++ phpdoc-cs/security/filesystem.xml
<?xml version="1.0" encoding="iso-8859-2"?>
<!-- EN-Revision: 1.3 Maintainer: luk Status: ready -->

  <chapter id="security.filesystem">
   <title>Bezpeènost souborových systémù</title>
   <simpara>
    PHP pracuje se zabezpeèením zabudovaným do vìt¹iny serverových systémù,
    které je zalo¾eno na oprávnìních k souborùm a adresáøùm. To vám umo¾òuje
    ovládat, které soubory v souborovém systému se smí èíst. Pozornost je
    potøeba vìnovat jakýmkoli souborùm, které jsou èitelné v¹em u¾ivatelùm,
    kvùli tomu, zda je skuteènì bezpeèné, aby je smìli èíst v¹ichni u¾ivatelé,
    kteøí mají k tomuto systému pøístup.
   </simpara>
   <simpara>
    Jeliko¾ je PHP navr¾eno tak, aby umo¾òovalo pøístup k filesystému na úrovni
    u¾ivatele, je vcelku mo¾né napsat PHP skript, který vám umo¾ní èíst
    systémové soubory, jako napø. /etc/passwd, mìnit konfiguraci ethernetu,
    posílat na tiskárnu obrovské tiskové úlohy apod. To má jasné dùsledky
    v tom, ¾e se musíte v¾dy ujistit, ¾e soubory, které chcete èíst nebo
    zapisovat, jsou skuteènì ty správné.
   </simpara>
   <simpara>
    Uva¾ujme následující skript, kde u¾ivatel øíká, ¾e by chtìl smazat soubor
    ve svém domovském adresáøi. To pøedpokládá situaci, kde se pro normální
    správu souborù pou¾ívá webové rozhraní implementované pomocí PHP, a u¾ivatel,
    pod ním¾ bì¾í Apache, má právo mazat soubory v domovských adresáøích
    u¾ivatelù.
   </simpara>
   <para>
    <example>
     <title>Slabá kontrola promìnných vede k....</title>
     <programlisting role="php">
<![CDATA[
<?php
// odstraò soubor z domovského adresáøe u¾ivatele
$username = $_POST['user_submitted_name'];
$homedir = "/home/$username";
$file_to_delete = "$userfile";
unlink ("$homedir/$userfile");
echo "$file_to_delete byl smazán!";
?>
]]>
     </programlisting>
    </example>
   Jeliko¾ se u¾ivatelské jméno posílá z formuláøe, mù¾e kdokoli poslat
   u¾ivatelské jméno a soubor patøící nìkomu jinému a mazat cizí soubory.
   V takovém pøípadì byste mìli chtít pou¾ívat nìjakou formu autentizace.
   Uva¾te, co by se mohlo stát, kdyby poslané promìnné obsahovaly 
   "../etc/" a "passwd". Kód by pak mohl bez problémù èíst:
    <example>
     <title>...útoku na souborový systém</title>
     <programlisting role="php">
<![CDATA[
<?php
// Odstraní soubor odkudkoli na pevném disku, kam má u¾ivatel PHP pøístup.
// Má-li PHP rootovská práva:
$username = "../etc/";
$homedir = "/home/../etc/";
$file_to_delete = "passwd";
unlink ("/home/../etc/passwd");
echo "/home/../etc/passwd byl smazán!";
?>
]]>
     </programlisting>
    </example>
    Existují dvì dùle¾ité roviny, ve kterých byste se mìli tìmto problémùm
    bránit.
    <itemizedlist>
     <listitem>
      <simpara>
       Povolit programu PHP pouze omezená oprávnìní.
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       Kontrolovat v¹echny zasílané promìnné.
      </simpara>
     </listitem>
    </itemizedlist>
    Zde je vylep¹ený skript:
    <example>
     <title>Bezpeènìj¹í kontrola názvu souboru</title>
     <programlisting role="php">
<![CDATA[
<?php
// Odstraní soubor z pevného disku, kam má u¾ivatel PHP pøístup.
$username = $_SERVER['REMOTE_USER']; // pou¾ití autentizaèního mechanismu

$homedir = "/home/$username";

$file_to_delete = basename("$userfile"); // odøízni cestu
unlink ($homedir/$file_to_delete);

$fp = fopen("/home/logging/filedelete.log","+a"); // zaznamenej smazání
$logstring = "$username $homedir $file_to_delete";
fwrite ($fp, $logstring);
fclose($fp);

echo "$file_to_delete byl smazán!";
?>
]]>
     </programlisting>
    </example>
    Ov¹em ani toto není zcela neprùstøelné. Pokud by vá¹ autentizaèní systém
    povoloval u¾ivatelùm vytváøet si vlastní u¾ivatelská jména, a u¾ivatel
    by si vybral "../etc/", systém by byl opìt ohro¾en. Z tohoto dùvodu
    byste mìli preferovat lépe pøizpùsobenou kontrolu:
    <example>
     <title>Bezpeènìj¹í kontrola názvu souboru</title>
     <programlisting role="php">
<![CDATA[
<?php
$username = $_SERVER['REMOTE_USER']; // pou¾ití autentizaèního mechanismu
$homedir = "/home/$username";

if (!ereg('^[^./][^/]*$', $userfile))
     die('bad filename'); // skonèi, nezpracovávej

if (!ereg('^[^./][^/]*$', $username))
     die('bad username'); // skonèi, nezpracovávej
// atd...
?>
]]>
     </programlisting>
    </example>
   </para>
   <para>
    V závislosti na operaèním systému existuje celá ¹iroká ¹kála souborù, 
    o které bychom se mìli zajímat, vèetnì souborù zaøízení (/dev/
    nebo COM1), konfiguraèních souborù (soubory /etc/ a .ini),
    známé oblasti ukládání souborù (/home/, Dokumenty) atd. Proto je obvykle
    lep¹í ustanovit politiku, kde je zakázáno v¹echno kromì toho, co explicitnì
    povolíte.
   </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:"../../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
-->