���������� ���� ��������, ����� ������� ����� ������������ ����������� �������� ����� ����������� ���-����� — ��������, ��������� ������� �� �� ��������. ����� �� �������� ������� ��� ������� � ���������� ������� ��������� ��������� ����� � �����������. ����� ��� ����� ����� �������� �� ����� ����� ������, ������������� �� PHP.
��� ����� ����������, ��� ���������� �������� ������ �� ������.
� PHP �������� ����� �������� ���������������� — ��������� �������� ������ ����� HTTP-��������. ������ ����, ����� ��������� ����� ����� HTTP-�������� � ������� � �������, �� ���������� �� � �������� �����������, �� ���� � �������� �� ������. ������ ��� ����� ����������� HTML-�����. �����, ������� ����� ������������ ��, �������� �� �������.
��� ����� �� �������, ����� �������� ���� �����, � ������� ������������ ����� ������ ��� �����, ��� ������� �� ������ "�����", ����� ������� �����, ��������� �� ����� ��������� ������. ��������, �� ����� �� ������ ����� �������� ������. ���� �� ������� ��� �� �����������.
����� ����� ����� ����� ������������ ����� �������� �� ������ "������� ����", � ���� ���������� �� ������, ��� ��� ������� PHP-��������.
��� ���������� �������� ������ �� ������ ����������� ��������� ����������� ����� HTML, ���������� ��������������� ��� ���� ����.
upload.html — HTML-����� ��� �������� ������
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>����������������� - �������� ����� ������</title>
</head>
<body>
<h1>�������� ����� ������ � ���������</h1>
<form action="upload.php" method="post" enctype="multipart/form-data" target="_blank">
<input name="MAX_FILE_SIZE" type="hidden" value="1000000">
��������� ���� <input name="userfile" type="file">
<input name="" type="submit" value="������� ����">
</form>
</body>
</html>
�������� ��������, ��� � ���� ����� ������������ ����� POST. �������� ������ ����� ������������ � ������� ������ PUT, ��������������� ������������� Netscape Composer � Amaya, ������ ��� ���� �������� ������ ������������ ��������� � ���. ���������� ����������� �� ������������ ����� GET.
���������� ����������� ���� �����.
������ ��� ��������� ������, ����� ���������, ��� � ��������� ������ PHP � ���� �������� ������������ ����� � ������������. ���� �� ������ ������������ ��������� ������ �� ���� ������� ������, ����� ��������������, ��� � ��� ����������� ����� ��������� ������ PHP, � ������� �� ������� ������ � ����������.
��� �� ������ ����� �������� ������ �� ����� �������� ����������, �� ��� ��������� ���� ����� ��������� ������������ � ��������� ���������� ������ ����, ����� �������������� ����� � ���������� �����������.
PHP-��� �������� ������ ����� �����, ������ �� ������� �� ������������ ������ PHP � �������� ������������. ����� ������� � ���������� ���������� �� ������ � ������ � ������� �� ����, �������� �� ��������� register_globals. �������������� ��� �� ������� register_globals, �� ������� ������������� ������ PHP �� ���� 4.1.
���� ��� �������� ���������� � �����, ���������� �� ���-������� ��� ��������� ������. �� ��������� ��� ������� ��������� ������� ���-�������. ���� ���� �� ��������������� � �� ����������� �� ��������� ���������� ��������, �� ����� ���������.
������, ������� ������ �������������� � ����� PHP-��������, ��������� � ��������������� ������� $_FILES. ���� register_globals �������, � ������ �������� � ���������������� ������ ����� ����� ����������. ������ �����, �������, ��� ��� �� �����, ��� ����� ��������� register_globals � �������� � ������� ����� ��������������� ������.
�������� � ������� $_FILES ����� ��������� � ������ ����������� <file> �� ����� HTML-�����. ��������� ������� ����� ����� ��� userfile, ���������� ������� �������� ��������� �������:
������, ����� ��������, ��� ��������� ���� � ��� �� ����������, ����� ����������� ��� � ����� �������� �����. ��������� ���� �� ��������� ���������� �������� ����� ������. ������, ���� ��������� ��������� ����, ��� ���� ����������� ��� �������������.
� ����� ������ ��������������, ��� ����������� ����� ������������ ������ � ���������, ������� ����� ������� �� ��� ��� ��������� HTML-����������� � ��������� � ����� ���������� �������.
upload.php — PHP-�������� ������ ����� �� HTML-�����
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>�������� . . .</title>
</head>
<body>
<h1>�������� ����� . . . </h1>
<?php
if ($_FILES['userfile']['error'] > 0)
{
echo '��������: ';
switch ($_FILES['userfile']['error'])
{
case 1: echo '������ ����� ������ uoload_max_filesize' ; break;
case 2: echo '������ ����� ������ max_file_size'; break;
case 3: echo '��������� ������ ����� �����'; break;
case 4: echo '���� �� ��������'; break;
}
exit;
}
// ��������, ����� �� ���� ���������� MIME-���
if ($_FILES ['userfile']['type'] != 'text/plain')
{
echo '��������: ���� �� �������� ���������';
exit;
}
// �������� ���� ����, ���� �����
$upfile = '/uploads/'.$_FILES['userfile']['name'];
if ($_FILES['userfile']['tmp_name'])
{
if (!move_uploaded_file($_FILES['userfile']['tmp_name'], $upfile))
{
echo '��������: ���������� ����������� ���� � ������� ����������';
exit;
}
}
else
{
echo '��������: �������� ����� ����� �������� �����. ����: ';
echo $_FILES['userfile']['name'];
exit;
}
echo '���� ������� ��������. <br><br>';
// ������������������ ����������� �����
$fp = fopen($upfile, 'r');
$contents = fread ($fp, filesize ($upfile));
fclose ($fp);
$contents = strip_tags ($contents);
$fp = fopen ($upfile, 'w');
fwrite ($fp, $contents);
fclose($fp);
// ����� ������������ �����
echo '��������������� �������� ����������� ������������ �����: <br><hr>';
echo $contents;
echo '<br><hr>';
?>
</body>
</html>
������� ����� �������� ���������� �������� �� ������� ������������� ������. �������� ����� ��������� � ������������� ������ ��������� ������������, � ���� ���� ������ ���� ������ � ��������. ����� ��� ����� ����� ��������� ��������� ����, ����� ��������� � ������������ ��� ����������� ����������.
���������, ����� �������� ����� �������� ��������.
������� ����������� ��� ������, ������������ � $_FILES['userfile']['error'] . ������� ���� ������ ������������� ����������� ���������. ��������� ��������� � �� �������� ����������� ����:
����� �� ��������� MIME-���. � ������ ������ �� ������, ��� ����� ��������� ������ ��������� �����, ������� MIME-��� �������������� ����� ��������� $_FILES ['userfile']['type'] �� ������� 'text/plain'. ��� ������ �������� �� ������� ������, � �� ��������, ��������� � �������������. MIME-��� ������������ ��������� ������������ �� ������ ���������� �����, � ����� ���������� �������. ��������� ���������� �������� �������� ������ MIME-���, �������������� ������ ����� ��������������� ����.
����� �� ���������, ��� ���� ������������� �������� � �� �������� ��������� ������ ����� /etc/passwd. ��������� ����� �� �������� � ����� �������.
���� ��� ���������, �� �� �������� ���� � ��������������� ��� ���� �������. � ������ ������� ��� ������� /uploads/ —�� ��������� �� ��������� ������ ���-���������� � ������ ������ ��� ��������� � ���� ��� ������, ������� ������������ ����� ����-������ ����������.
����� �� ������������ ����, ������� �� ���� ��� ��������� HTML � PHP-����������� � ������� ������� strip_tags() � ���������� ���� �������.
� ������� ���������� ����� ������������ �� ������, ����� ������������ ��������, ��� �������� ����� ������� ���������.
��������� ��������� ���������� �������� �������� ���:
� �������� 2000 �. ��������� ��������� � ����������, ��� ������ ������� ��������� ����� ����������� �������� �������� �� ��������� ���������� ����� ������ ������������. ���������� ����������������� � ������ �������� BUGTRAQ. ����������� ������������ �� ����������� ������������ ������������ �� ��������� ������� BUGTRAQ, � ���������, �� �������� http://seclists.org/bugtraq/2000/Sep/index.html.
� ����� �������� ��������� ���������� �������� ����� � �������� ����, ��� �� ����� ���� �� � ��������� ������ ��������� /etc/passwd, ���� ��������� ������� move_uploaded_file() � ����� ����� ������������ is_uploaded_file().
�������� ���������� �������� �������� ����� ��������� ���������� � ��������� ����������� ������� ��������� ���� � ������������ ������ � ��������� �������� ������������ ��� ��� �����������. � ��������� ������ �������� �������� ���������� ������������ ����� ������������ ����� ���� ��������� � �����, �� �������� �� ����� ���������, � ������������� ���������� ����������� ������� � ������ �����, ���������� ��� ���������� ���-��������. ����� ���� ������ ����� ��������� ����� � ���������������� ����������� — ��������, /etc/passwd ��� ���� ��������� ���-����, ���������� ������ ������� � ���� ������.
��� �������� ������ �� ������ ������� ��������� �� �������� ��������� ������ ��������.