Использование Register_Globals
Для повышения безопасности
работы PHP можно сконфигурировать PHP с опцией register_globals = off. Отключив
таким образом возможность внедрения отправленных пользователем переменных в PHP-код,
вы можете уменьшить количество заражённых переменных, которые потенциальный взломщик
может попытаться направить вам. Для подделки отправляемой информации понадобится
дополнительное время, а ваши внутренние переменные будут эффективно изолированы
от отправляемых пользователем данных. Крупные
вузовские комплексы
Хотя понадобятся некоторые дополнительные усилия
при работе с PHP, но преимущества от этой работы с лихвой окупят эти затраты.
Пример 4-14. Работа без register_globals=off
<?php if ($username) { // может быть подделана пользователем
в get/post/куках $good_login = 1; } if ($good_login == 1) { // может быть подделана
пользователем в get/post/куках fpassthru ("/highly/sensitive/data/index.html");
} ?> | |
Пример 4-15. Работа с register_globals = off
<?php if($_COOKIE['username']){ // может прийти только от куки,
подделанной или нет $good_login = 1; fpassthru ("/highly/sensitive/data/index.html");
} ?> | Теоретическая механика
Пространственная система сил — система сил, линии действия которых не лежат
в одной плоскости. |
Разумно пользуясь этим, можно даже делать
предварительную проверку и предупреждать в случае попытки подделки кода. Если
вы наперёд знаете, откуда должна прийти переменная, вы можете проверять, не пришли
ли данные несоответствующего вида. Поскольку нет гарантии, что данные не были
подделаны, взломщику необходимо придумывать нужный вид подделки. Из процедурно-ориентированных
языков широко известны языки Фортран, Алгол, Кобол, Basic, Pascal, Ада,
Пример 4-16. Определение заражения простой переменной
<?php if ($_COOKIE['username'] && !$_POST['username']
&& !$_GET['username'] ) { // выполнить проверку имени пользователя ...
$good_login = 1; fpassthru ("/highly/sensitive/data/index.html"); } else { mail("admin@example.com",
"Possible breaking attempt", $_SERVER['REMOTE_ADDR']); echo "Security violation,
admin has been alerted."; exit; } ?> | |
Конечно,
простое отключение register_globals не означает, что код безопасен. Каждый блок
передаваемых данных необходимо проверять дополнительно. Искусство
Китая Китай или Срединное царство, как с незапамятных времён именуют его китайцы,
— страна, раскинувшаяся на необъятных просторах Восточной и Центральной Азии.
Здесь около шести тысяч лет назад зародилась одна из древнейших цивилизаций, которая
оказала влияние на развитие всех народов, населявших страны Дальнего Востока.
Китайская письменность стала основой письменности корейцев, вьетнамцев и японцев.
Многие изобретения китайцев, такие, как шёлк, порох и компас, являются достоянием
всего человечества. В Китае впервые появились фарфор, бумага, кисти, тушь и книгопечатание.
C
cal_days_in_month cal_from_jd
cal_info cal_to_jdcall_user_func
call_user_func_array call_user_method
call_user_method_array ccvs_add
ccvs_auth ccvs_command
ccvs_count ccvs_deleteccvs_done
ccvs_init ccvs_lookupccvs_new
ccvs_report ccvs_returnccvs_reverse
ccvs_sale ccvs_status
ccvs_textvalueccvs_void ceilchdir
checkdate checkdnsrr
chgrpchmod chopchown
chrchroot chunk_split
class_exists clearstatcache
closedir closelog
com_addref com_get
com_invoke com_isenum
com_load_typelib com_propget
com_propput com_propsetcom_release
com_set compactconnection_aborted
connection_status connection_timeout
constant convert_cyr_stringcopy
coscosh count
count_charscpdf_add_annotation cpdf_add_outline
cpdf_arc cpdf_begin_text
cpdf_circle cpdf_clip
cpdf_closecpdf_closepath cpdf_closepath_fill_stroke
cpdf_closepath_stroke cpdf_continue_text
cpdf_curveto cpdf_end_text
cpdf_fill cpdf_fill_stroke
cpdf_finalize cpdf_finalize_page
-
Использование удалённых/remote файлов
Если поддержка "URL
fopen-оболочки/wrapper" включена при конфигурировании PHP (если вы только не передали
явным образом флаг --disable-url-fopen-wrapper для конфигурирования (для
версий, новее 4.0.3) или не установили allow_url_fopen в off в
файле php.ini (для более новых версий)), вы можете использовать HTTP
и FTP- URL'ы с большинством функций, которые принимают filename/имя файла в качестве
параметра, в том числе - операторы require() и include().
Примечание: Windows-версия PHP в настоящее время не поддерживает
удалённый доступ к файлам для следующих функций: include(), include_once(),
require() require_once().
Например, вы можете
использовать это для того, чтобы открыть файл на удалённом web-сервере, разобрать
вывод данных, а затем использовать эти данные в запросе к БД или просто вывести
их в стиле вашего web-сайта.
Пример
20-1. Получение названия/title удалённой страницы
<?php $file = fopen ("http://www.example.com/", "r"); if (!$file)
{ echo "<p>Unable to open remote file.\n"; exit; } while (!feof ($file))
{ $line = fgets ($file, 1024); /* Это будет работать, только если title и его
тэги расположены в одной строчке */ if (eregi ("<title>(.*)</title>",
$line, $out)) { $title = $out[1]; break; } } fclose($file); ?> |
|
Вы можете также записывать в файлы по FTP, если
соединены как пользователь с корректными правами доступа и если файл ещё не существует.
Для соединения как любой пользователь, кроме 'anonymous', вам необходимо специфицировать
username (и, возможно, password) в URL, как, например: 'ftp://user:password@ftp.example.com/path/to/file'.
(Вы можете использовать тот же синтаксис для доступа к файлам по HTTP, если необходима
Basic-аутентификация.)
Пример
20-2. Сохранение данных на удалённом сервере
<?php $file = fopen ("ftp://ftp.example.com/incoming/outputfile",
"w"); if (!$file) { echo "<p>Unable to open remote file for writing.\n";
exit; } /* Здесь записываются данные. */ fputs ($file, $_SERVER['HTTP_USER_AGENT']
. "\n"); fclose ($file); ?> | |
Примечание: из этого примера у вас может возникнуть идея использовать
эту технику для записи в удалённый log, но, как указано выше, вы можете записывать
только в новый файл с использованием оболочек URL fopen(). Для выполнения распределённого
логинга, вроде этого, вы должны просмотретьsyslog().
cpdf_global_set_document_limits
cpdf_import_jpeg cpdf_lineto
cpdf_movetocpdf_newpath cpdf_open
Производная обратных функций
cpdf_output_buffercpdf_page_init cpdf_place_inline_image
cpdf_rect cpdf_restore
cpdf_rlineto cpdf_rmoveto
cpdf_rotate cpdf_rotate_text
cpdf_save
cpdf_save_to_filecpdf_scale cpdf_set_action_url
cpdf_set_char_spacing cpdf_set_creator
cpdf_set_current_page cpdf_set_font
cpdf_set_font_directories cpdf_set_font_map_file
cpdf_set_horiz_scaling cpdf_set_keywords
cpdf_set_leading cpdf_set_page_animation
cpdf_set_subject cpdf_set_text_matrix
cpdf_set_text_pos cpdf_set_text_rendering
cpdf_set_text_rise cpdf_set_title
cpdf_set_viewer_preferences
cpdf_set_word_spacing cpdf_setdash
cpdf_setflat cpdf_setgray
cpdf_setgray_fill cpdf_setgray_stroke
cpdf_setlinecap cpdf_setlinejoin
cpdf_setlinewidth cpdf_setmiterlimit
cpdf_setrgbcolor cpdf_setrgbcolor_fill
cpdf_setrgbcolor_stroke cpdf_show
cpdf_show_xy cpdf_stringwidth
cpdf_stroke cpdf_text
cpdf_translate crack_check
crack_closedict crack_getlastmessage
crack_opendict crc32
create_function crypt
ctype_alnumctype_alpha ctype_cntrl
ctype_digit ctype_graphctype_lower
ctype_print ctype_punct
ctype_spacectype_upper ctype_xdigit
curl_close curl_errnocurl_error
curl_exec curl_getinfo
curl_init curl_setoptcurl_version
current cybercash_base64_decode
cybercash_base64_encode cybercash_decr
cybercash_encr cybermut_creerformulairecm
cybermut_creerreponsecm cybermut_testmac
cyrus_authenticate cyrus_bind
cyrus_close
cyrus_connectcyrus_query cyrus_unbind
Возвращаемые значения
Возвращение значений из ваших функций в PHP было
кратко описано в предыдущем разделе; в этом разделе дана информация о деталях.
Return-значения передаются через переменную return_value, которая передаётся
в вашу функцию как аргумент. Аргумент return_value состоит из zval-контейнера
(см. ранее обсуждение интерфейса вызова), который вы можете модифицировать. Этот
контейнер всегда размещается самостоятельно, поэтому вам не нужно запускать в
нём MAKE_STD_ZVAL. Вместо этого вы можете выполнять прямой доступ к его
членам.