cvs: phpdoc-cs / language-defs.ent /security index.xml
[email protected] ("Lukas Jelinek") Mon, 15 Mar 2004 18:37:14 -0000
| Newsgroups | php.doc.cs |
|---|---|
| Message-ID | <cvsluk1079375834@cvsserver> |
luk Mon Mar 15 13:37:14 2004 EDT
Modified files:
/phpdoc-cs language-defs.ent
/phpdoc-cs/security index.xml
Log:
Some updates
luk-20040315133714.txt
(text/plain, 21.6 KB)
http://cvs.php.net/diff.php/phpdoc-cs/language-defs.ent?r1=1.10&r2=1.11&ty=u
Index: phpdoc-cs/language-defs.ent
diff -u phpdoc-cs/language-defs.ent:1.10 phpdoc-cs/language-defs.ent:1.11
--- phpdoc-cs/language-defs.ent:1.10 Thu Jan 22 17:10:49 2004
+++ phpdoc-cs/language-defs.ent Mon Mar 15 13:37:13 2004
@@ -1,21 +1,21 @@
-<?xml encoding="iso-8859-2"?>
-<!-- EN-Revision: 1.15 Maintainer: luk Status: ready -->
-
-<!ENTITY PHPManual "Manuál PHP">
-<!ENTITY Date "Datum:">
-<!ENTITY GettingStarted "Zaèínáme">
-<!ENTITY Installation "Instalace">
-<!ENTITY LanguageReference "Reference jazyka">
-<!ENTITY Features "Vlastnosti">
-<!ENTITY Security "Bezpeènost">
-<!ENTITY FunctionReference "Reference funkcí">
-<!ENTITY Appendixes "Dodatky">
-<!ENTITY PEAR "PEAR: Repozitáø roz¹íøení a aplikací PHP">
-<!ENTITY FAQ "FAQ: Èasto zodpovídané otázky">
-<!ENTITY FAQabbrev "FAQ">
-<!ENTITY api "PHP API: Rozhraní pro autory roz¹íøení PHP">
-<!ENTITY apiabbrev "PHP API">
-<!ENTITY FunctionIndex "Rejstøík funkcí">
-<!ENTITY CHMEdition "Vydání HTML Help">
-<!ENTITY ReservedConstants "Pøeddefinované konstanty">
-<!ENTITY MissingStuff "Co zde chybí">
+<?xml encoding="iso-8859-2"?>
+<!-- EN-Revision: 1.15 Maintainer: luk Status: ready -->
+
+<!ENTITY PHPManual "Manuál PHP">
+<!ENTITY Date "Datum:">
+<!ENTITY GettingStarted "Zaèínáme">
+<!ENTITY Installation "Instalace">
+<!ENTITY LanguageReference "Reference jazyka">
+<!ENTITY Features "Vlastnosti">
+<!ENTITY Security "Bezpeènost">
+<!ENTITY FunctionReference "Reference funkcí">
+<!ENTITY Appendixes "Dodatky">
+<!ENTITY PEAR "PEAR: Repozitáø roz¹íøení a aplikací PHP">
+<!ENTITY FAQ "FAQ: Èasto kladené otázky">
+<!ENTITY FAQabbrev "FAQ">
+<!ENTITY api "PHP API: Rozhraní pro autory roz¹íøení PHP">
+<!ENTITY apiabbrev "PHP API">
+<!ENTITY FunctionIndex "Rejstøík funkcí">
+<!ENTITY CHMEdition "Vydání HTML Help">
+<!ENTITY ReservedConstants "Pøeddefinované konstanty">
+<!ENTITY MissingStuff "Co zde chybí">
http://cvs.php.net/diff.php/phpdoc-cs/security/index.xml?r1=1.1&r2=1.2&ty=u
Index: phpdoc-cs/security/index.xml
diff -u phpdoc-cs/security/index.xml:1.1 phpdoc-cs/security/index.xml:1.2
--- phpdoc-cs/security/index.xml:1.1 Sat Mar 6 11:11:35 2004
+++ phpdoc-cs/security/index.xml Mon Mar 15 13:37:14 2004
@@ -55,8 +55,6 @@
slo¾itostí.
Vìru, nìkteré bezpeènostní útoky jsou pouze prolomení tohoto druhu
pøehnanì stavìné bezpeènosti, která bìhem èasu povoluje.
- Indeed, some security attacks are merely exploits of
- this kind of overly built security, which tends to erode over time.
</simpara>
<simpara>
Fráze hodná zapamatování: Systém je jen tak dobrý, jako jeho
@@ -225,60 +223,55 @@
nikdy zobrazovány.
</simpara>
<simpara>
- Also if the method for making sure the requests are not
- redirected, as described in the previous section, is not
- available, it is necessary to set up a script doc_root that is
- different from web document root.
+ Také není-li k dispozici metoda k zaji¹tìní, ¾e budou po¾adavky
+ pøesmìrovávány, jak je popsáno v pøedchozí sekci, je tøeba nastavit
+ skriptový doc_root na jinou hodnotu (umístìní) ne¾ na koøenový adresáø
+ webových dokumentù.
</simpara>
<simpara>
- You can set the PHP script document root by the configuration
- directive <link linkend="ini.doc-root">doc_root</link> in the
- <link linkend="configuration.file">configuration file</link>, or
- you can set the environment variable
- <envar>PHP_DOCUMENT_ROOT</envar>. If it is set, the CGI version
- of PHP will always construct the file name to open with this
- <parameter>doc_root</parameter> and the path information in the
- request, so you can be sure no script is executed outside this
- directory (except for <parameter>user_dir</parameter>
- below).
+ Skriptový koøenový adresáø mù¾ete nastavit konfiguraèní direktivou
+ <link linkend="ini.doc-root">doc_root</link> v
+ <link linkend="configuration.file">konfiguraèním souboru</link> nebo
+ lze také nastavit promìnnou prostøedí <envar>PHP_DOCUMENT_ROOT</envar>.
+ Je-li toto nastaveno, CGI verze PHP v¾dy zkonstruuje název souboru k otevøení
+ s tímto parametrem <parameter>doc_root</parameter> a s informací o cestì
+ v po¾adavku, tak¾e si mù¾ete být jisti, ¾e se nespustí ¾ádný skript mimo
+ tento adresáø (kromì <parameter>user_dir</parameter> - viz ní¾e).
</simpara>
<simpara>
- Another option usable here is <link
- linkend="ini.user-dir">user_dir</link>. When user_dir is unset,
- only thing controlling the opened file name is
- <parameter>doc_root</parameter>. Opening an url like <filename
- role="url">http://my.host/~user/doc.php</filename> does not
- result in opening a file under users home directory, but a file
- called <filename role="uri">~user/doc.php</filename> under
- doc_root (yes, a directory name starting with a tilde
- [<literal>~</literal>]).
+ Jinou zde pou¾itelnou mo¾ností je parametr
+ <link linkend="ini.user-dir">user_dir</link>. Není-li nastaven, jedinou
+ vìcí, která øídí urèení názvu otevíraného souboru, je parametr
+ <parameter>doc_root</parameter>. Otevøení URL jako <filename
+ role="url">http://my.host/~user/doc.php</filename> nezpùsobí otevøení
+ souboru pod domovským adresáøem u¾ivatele, nýbr¾ souboru nazvaného
+ <filename role="uri">~user/doc.php</filename> pod doc_root (ano, adresáøe
+ s názvem zaèínajícím vlnovkou [<literal>~</literal>]).
</simpara>
<simpara>
- If user_dir is set to for example <filename
- role="dir">public_php</filename>, a request like <filename
- role="url">http://my.host/~user/doc.php</filename> will open a
- file called <filename>doc.php</filename> under the directory
- named <filename role="dir">public_php</filename> under the home
- directory of the user. If the home of the user is <filename
- role="dir">/home/user</filename>, the file executed is
+ Je-li parametr user_dir nastaven napø. na <filename
+ role="dir">public_php</filename>po¾adavek na <filename
+ role="url">http://my.host/~user/doc.php</filename> otevøe soubor s názvem
+ <filename>doc.php</filename> v adresáøi
+ <filename role="dir">public_php</filename> pod domovským adresáøem
+ u¾ivatele. Je-li domovským adresáøem <filename
+ role="dir">/home/user</filename>, spu¹tìným souborem bude
<filename>/home/user/public_php/doc.php</filename>.
</simpara>
<simpara>
- <parameter>user_dir</parameter> expansion happens regardless of
- the <parameter>doc_root</parameter> setting, so you can control
- the document root and user directory access
- separately.
+ Expanze <parameter>user_dir</parameter> se dìje bez ohledu na nastavení
+ parametru <parameter>doc_root</parameter>, tak¾e mù¾ete pøístup do
+ koøenového adresáøe dokumnetù a do domovských adresáøù øídit oddìlenì.
</simpara>
</sect2>
<sect2 id="security.cgi-bin.shell">
<title>Pøípad 4: PHP parser mimo WWW strom</title>
<para>
- A very secure option is to put the PHP parser binary somewhere
- outside of the web tree of files. In <filename
- role="dir">/usr/local/bin</filename>, for example. The only real
- downside to this option is that you will now have to put a line
- similar to:
+ Velmi bezpeènou mo¾ností je umístit soubor s PHP parserem nìkam mimo
+ webový strom. Napø. do adresáøe
+ <filename role="dir">/usr/local/bin</filename>. Jedinou skuteènou
+ nevýhodou je, ¾e budete nyní muset vlo¾it øádek podobný tomuto:
<informalexample>
<programlisting>
<![CDATA[
@@ -286,19 +279,17 @@
]]>
</programlisting>
</informalexample>
- as the first line of any file containing PHP tags. You will also
- need to make the file executable. That is, treat it exactly as
- you would treat any other CGI script written in Perl or sh or any
- other common scripting language which uses the
- <literal>#!</literal> shell-escape mechanism for launching
- itself.
+ jako první øádek ka¾dého souboru obsahujícího PHP pøíkazy. Navíc budete
+ muset soubor nastavit jako spustitelný. Tj. nalo¾it s ním naprosto stejnì,
+ jako byste nalo¾ili s jakýmkoli jiným CGI skriptem napsaným v Perlu, sh
+ nebo jiném bì¾ném skriptovacím jazyce, který pou¾ívá ke svému spou¹tìní
+ tzv. shell-escape (<literal>#!</literal>) mechanismus.
</para>
<para>
- To get PHP to handle <envar>PATH_INFO</envar> and
- <envar>PATH_TRANSLATED</envar> information correctly with this
- setup, the PHP parser should be compiled with the <link
- linkend="install.configure.enable-discard-path">--enable-discard-path</link>
- configure option.
+ Aby se v této konfiguraci správnì zpracovaly informace
+ <envar>PATH_INFO</envar> a <envar>PATH_TRANSLATED</envar>, PHP parser by
+ mìl být zkompilován s volbou <link
+ linkend="install.configure.enable-discard-path">--enable-discard-path</link>.
</para>
</sect2>
@@ -307,144 +298,138 @@
<sect1 id="security.apache">
<title>Instalace jako modulu do Apache</title>
<simpara>
- When PHP is used as an Apache module it inherits Apache's user
- permissions (typically those of the "nobody" user). This has several
- impacts on security and authorization. For example, if you are using
- PHP to access a database, unless that database has built-in access
- control, you will have to make the database accessible to the
- "nobody" user. This means a malicious script could access and modify
- the database, even without a username and password. It's entirely
- possible that a web spider could stumble across a database
- administrator's web page, and drop all of your databases. You can
- protect against this with Apache authorization, or you can design
- your own access model using LDAP, &htaccess; files, etc. and include
- that code as part of your PHP scripts.
+ Pou¾ívá-li se PHP jako modul do Apache, dìdí pøístupová práva u¾ivatele
+ Apache (typicky u¾ivatele "nobody"). To pøiná¹í urèité problémy
+ s bezpeèností a autorizací. Pou¾íváte-li napøíklad PHP pro pøístup k
+ databázi, ani¾ by tato databáze mìla zabudované øízení pøístupu, budete
+ muset tuto databázi zpøístupnit u¾ivateli "nobody". To znamená, ¾e
+ ¹kodlivý skript mù¾e pøistupovat k databázi a mìnit ji bez u¾ivatelského
+ jména a hesla. Je vcelku mo¾né, ¾e webový pavouk projde pøes
+ administrátorskou stránku a znièí v¹echny va¹e databáze. Proti tomu se
+ mù¾ete chránit pomocí autorizace Apache nebo vytvoøit vlastní pøístupový
+ model za pomoci LDAP, souborù &htaccess;, apod., a vkládat tento kód do
+ va¹ich PHP skriptù.
</simpara>
<simpara>
- Often, once security is established to the point where the PHP user
- (in this case, the apache user) has very little risk attached to it,
- it is discovered that PHP is now prevented from writing any files
- to user directories. Or perhaps it has been prevented from accessing
- or changing databases. It has equally been secured from writing
- good and bad files, or entering good and bad database transactions.
+ Èasto, kdy¾ u¾ se bezpeènostní øe¹ení umístí do bodu, kde má PHP u¾ivatel
+ (v tomto pøípadì Apache u¾ivatel) malá rizika s tím spojená, se zjistí,
+ ¾e se PHP zamezilo zapisovat jakékoli soubory do u¾ivatelských adresáøù.
+ Nebo ¾e se zamezilo pøístupu nebo zmìnì databáze. To se rovná ochranì pøed
+ zápisem dobrých i ¹patných souborù, nebo provádìní dobrých i ¹patných
+ databázových transakcí.
</simpara>
<simpara>
- A frequent security mistake made at this point is to allow apache
- root permissions, or to escalate apache's abilitites in some other
- way.
+ Èastou bezpeènostní chybou, která se v tomto místì dìlá, je pøidìlení
+ superu¾ivatelských (root) práv serveru Apache nebo jiné posílení jeho
+ pravomocí.
</simpara>
<simpara>
- Escalating the Apache user's permissions to root is extremely
- dangerous and may compromise the entire system, so sudo'ing,
- chroot'ing, or otherwise running as root should not be considered by
- those who are not security professionals.
+ Posílení práv u¾ivatele Apache na superu¾ivatele je extrémnì nebezpeèné
+ a mù¾e zkompromitovat celý systém, tak¾e kdo není bezpeènostní profesionál,
+ nemìl by zde pou¾ívat "su", "chroot" a podobnì pracující pøíkazy.
</simpara>
<simpara>
- There are some simpler solutions. By using
- <link linkend="ini.open-basedir">open_basedir</link> you can control and restrict what
- directories are allowed to be used for PHP. You can also set up
- apache-only areas, to restrict all web based activity to non-user,
- or non-system, files.
+ Existují jednodu¹¹í øe¹ení. Pou¾itím
+ <link linkend="ini.open-basedir">open_basedir</link> mù¾ete øídit a
+ omezovat, které adresáøe lze v PHP pou¾ívat. Mù¾ete také nastavit oblasti
+ pouze pro Apache a omezit tak v¹echny webové aktivity na ne-u¾ivatelské
+ nebo ne-systémové soubory.
</simpara>
</sect1>
<sect1 id="security.filesystem">
<title>Bezpeènost souborového systému</title>
<simpara>
- PHP is subject to the security built into most server systems with
- respect to permissions on a file and directory basis. This allows
- you to control which files in the filesystem may be read. Care
- should be taken with any files which are world readable to ensure
- that they are safe for reading by all users who have access to that
- filesystem.
+ PHP pracuje v rámci bezpeènostního modelu zabudovaného do vìt¹iny
+ serverových systémù, fungujících na bázi práv k souborùm a adresáøùm.
+ To umo¾òuje urèovat, které soubory z filesystému se smìjí èíst. Je tøeba
+ si dát pozor u souborù, které jsou èitelné "celému svìtu", z hlediska
+ zaji¹tìní, aby byly bezpeènì èitelné pro v¹echny u¾ivatele, kteøí mají
+ k tomuto souborovému systému pøístup.
</simpara>
<simpara>
- Since PHP was designed to allow user level access to the filesystem,
- it's entirely possible to write a PHP script that will allow you
- to read system files such as /etc/passwd, modify your ethernet
- connections, send massive printer jobs out, etc. This has some
- obvious implications, in that you need to ensure that the files
- that you read from and write to are the appropriate ones.
+ Jeliko¾ bylo PHP navr¾eno pro umo¾nìní pøístupu k filesystému na u¾ivatelské
+ úrovni, je vcelku mo¾né napsat PHP skript, který umo¾ní èíst systémové
+ soubory jako /etc/passwd, modifikovat va¹e ethernetová pøipojení, odesílat
+ masivní tiskové úlohy apod. To má jasné dùsledky, kdy musíte zajistit, ¾e
+ soubory, ze kterých se ète nebo do kterých se zapisuje, jsou ty správné.
</simpara>
<simpara>
- Consider the following script, where a user indicates that they'd
- like to delete a file in their home directory. This assumes a
- situation where a PHP web interface is regularly used for file
- management, so the Apache user is allowed to delete files in
- the user home directories.
+ Uva¾me následující skript, kde u¾ivatel indikuje, ¾e by chtìl smazat
+ soubor v domovském adresáøi. To pøedpokládá situaci, kde webové rozhraní
+ PHP je normálnì pou¾ito ke správì souborù, tak¾e u¾ivatel Apache má
+ právo mazat soubory v domovských adresáøích u¾ivatelù.
</simpara>
<para>
<example>
- <title>Poor variable checking leads to....</title>
+ <title>Chabá kontrola promìnných vede k....</title>
<programlisting role="php">
<![CDATA[
<?php
-// remove a file from the user's home directory
+// 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 has been deleted!";
+echo "$file_to_delete byl smazán!";
?>
]]>
</programlisting>
</example>
- Since the username is postable from a user form, they can submit
- a username and file belonging to someone else, and delete files.
- In this case, you'd want to use some other form of authentication.
- Consider what could happen if the variables submitted were
- "../etc/" and "passwd". The code would then effectively read:
+ Jeliko¾ lze u¾ivatelské jméno poslat z formuláøe, lze poslat u¾ivatelské
+ jméno a název souboru kohokoliv jiného a mazat jeho soubory.
+ V takovém pøípadì byste mìli chtít pou¾ívat nìjakou formu ovìøení identity.
+ Uva¾te, co se mù¾e stát, kdyby odeslané promìnné byly "../etc/" a "passwd".
+ Kód by pak mohl efektivnì èíst:
<example>
- <title>... A filesystem attack</title>
+ <title>... Útok na filesystém</title>
<programlisting role="php">
<![CDATA[
<?php
-// removes a file from anywhere on the hard drive that
-// the PHP user has access to. If PHP has root access:
+// odstraní soubor odkudkoli na disku, kam má PHP u¾ivatel pøístup.
+// Má-li PHP práva roota:
$username = "../etc/";
$homedir = "/home/../etc/";
$file_to_delete = "passwd";
unlink ("/home/../etc/passwd");
-echo "/home/../etc/passwd has been deleted!";
+echo "/home/../etc/passwd byl smazán!";
?>
]]>
</programlisting>
</example>
- There are two important measures you should take to prevent these
- issues.
+ Existují dvì dùle¾itá omezení, která by mìla podobným pøípadùm zabránit.
<itemizedlist>
<listitem>
<simpara>
- Only allow limited permissions to the PHP web user binary.
+ Povolte pouze omezená práva k PHP programu.
</simpara>
</listitem>
<listitem>
<simpara>
- Check all variables which are submitted.
+ Ovìøujte v¹echny promìnné, které jsou odesílány na server.
</simpara>
</listitem>
</itemizedlist>
- Here is an improved script:
+ Tady je vylep¹ený skript:
<example>
- <title>More secure file name checking</title>
+ <title>Bezpeènìj¹í ovìøování názvu souboru</title>
<programlisting role="php">
<![CDATA[
<?php
-// removes a file from the hard drive that
-// the PHP user has access to.
-$username = $_SERVER['REMOTE_USER']; // using an authentication mechanisim
+// odstraní soubor na disku, kam má PHP u¾ivatel pøístup.
+$username = $_SERVER['REMOTE_USER']; // pou¾ití autentizaèního mechanismu
$homedir = "/home/$username";
-$file_to_delete = basename("$userfile"); // strip paths
+$file_to_delete = basename("$userfile"); // oøíznutí cesty
unlink ($homedir/$file_to_delete);
-$fp = fopen("/home/logging/filedelete.log","+a"); //log the deletion
+$fp = fopen("/home/logging/filedelete.log","+a"); //záznam smazání
$logstring = "$username $homedir $file_to_delete";
fputs ($fp, $logstring);
fclose($fp);
-echo "$file_to_delete has been deleted!";
+echo "$file_to_delete byl smazán!";
?>
]]>
</programlisting>
@@ -1018,7 +1003,7 @@
</sect1>
<sect1 id="security.registerglobals">
- <title>Using Register Globals</title>
+ <title>Registrace globálních promìnných (Register Globals)</title>
<para>
Perhaps the most controversial change in PHP is when the default value
for the PHP directive <link linkend="ini.register-globals">
@@ -1156,7 +1141,7 @@
<sect1 id="security.variables">
- <title>User Submitted Data</title>
+ <title>Data posílaná u¾ivatelem</title>
<para>
The greatest weakness in many PHP programs is not inherent in the
language itself, but merely an issue of code not being written with
@@ -1285,18 +1270,18 @@
</sect1>
<sect1 id="security.current">
- <title>Keeping Current</title>
+ <title>Udr¾ování aktuálnosti</title>
<simpara>
- PHP, like any other large system, is under constant scrutiny and
- improvement. Each new version will often include both major and
- minor changes to enhance and repair security flaws, configuration
- mishaps, and other issues that will affect the overall security
- and stability of your system.
+ PHP, jako jakýkoli jiný velký systém, je podrobován neustálé kontrole a
+ vylep¹ování. Ka¾dá nová verze èasto zahrnuje jak velké, tak malé zmìny,
+ které jej roz¹iøují a opravují bezpeènostní chyby, konfiguraèní
+ nepøijemnosti a jiné skuteènosti, které mají vliv na celkovou bezpeènost
+ a stabilitu va¹eho systému.
</simpara>
<simpara>
- Like other system-level scripting languages and programs, the best
- approach is to update often, and maintain awareness of the latest
- versions and their changes.
+ Jako u jiných skriptovacích jazykù a programù bì¾ících na systémové úrovni,
+ je nejlep¹í cestou èasto aktualizovat a hlídat si dostupnost nejnovìj¹ích
+ verzí a jejich zmìny.
</simpara>
</sect1>
</chapter>