Опасные функции php

Я храню php-функции в базе данных mySQL с пользовательского ввода, эти функции должны быть выполнены.

Как мы знаем, это может и позволит г-ну хакеру превратить красивый веб-сайт в швейцарский сыр!

Эти функции призваны быть простыми и не требуют какого-либо расширенного кодирования php. Они больше касаются обработки одного массива данных.

Поэтому, если г-н хакер попадает в id раздела администратора, чтобы отфильтровать любые функции php, которые могут нанести серьезный ущерб, прежде чем сохранять в базе данных.

Такие вещи, как «exec, shell_exec, system, passthru, popen, proc_open, proc_close», могут быть удалены все, что может разрешить внешние входные данные, такие как завиток.

Так что еще может быть опасно и должно быть удалено?

Я тоже нашел этот список: http://blog.eukhost.com/webhosting/dangerous-php-functions-must-be-disabled/

apache_child_terminate apache_setenv define_syslog_variables escapeshellarg escapeshellcmd eval exec fp fput ftp_connect ftp_exec ftp_get ftp_login ftp_nb_fput ftp_put ftp_raw ftp_rawlist highlight_file ini_alter ini_get_all ini_restore inject_code mysql_pconnect openlog passthru php_uname phpAds_remoteInfo phpAds_XmlRpc phpAds_xmlrpcDecode phpAds_xmlrpcEncode popen posix_getpwuid posix_kill posix_mkfifo posix_setpgid posix_setsid posix_setuid posix_setuid posix_uname proc_close proc_get_status proc_nice proc_open proc_terminate shell_exec syslog system xmlrpc_entity_decode 

Solutions Collecting From Web of "Опасные функции php"

Вы НИКОГДА не должны запускать функцию, определяемую пользователем. Есть миллионы способов, которыми пользователь может маскировать имя функции, которую вы не можете остановить. Например, вы можете сохранить имя функции в переменной и запустить функцию с переменной.

 <?php $test = "readfile"; $test("somePageWithDatabasePassword.php"); ?> 

Это совершенно верно. И если вы считаете, что можете тестировать функции, запускаемые из переменных, есть способы обойти это с помощью chr (), конкатенации, hex … и т. Д.

Я храню php-функции в базе данных mySQL с пользовательского ввода, эти функции должны быть выполнены.

Это ужасная идея. Будет очень сложно составить список «безопасных» функций, и PHP будет обладать локальными уязвимостями, которые могут быть использованы кем-либо достаточно осведомленным.

Даже белый список будет очень сложным; было бы трудно обнаружить код типа $a = 'exe'; $a .= 'c'; $a('echo foo'); $a = 'exe'; $a .= 'c'; $a('echo foo'); будет вызывать exec . Рассмотрим альтернативную стратегию, которая не предполагает сохранение исполняемого кода.

Я решил пойти на что-то вроде этого:

http://mustache.github.com/#demo

Это позволит моим пользователям форматировать туда свои данные без прямого PHP-кода.