我从用户输入将php函数存储到mySQL数据库,这些函数需要能够执行.
据我们所知,这可能并且将允许黑客先生将一个漂亮的网站变成瑞士奶酪!
这些函数意味着简单,不需要任何高级PHP编码.它们更多地是关于处理单个数据阵列.
因此,如果黑客先生进入管理员部分ID,过滤掉任何可能在保存到数据库之前可能造成严重损害的PHP功能.
诸如"exec,shell_exec,system,passthru,popen,proc_open,proc_close"之类的东西,任何可以允许像curl这样的外部输入的东西都需要删除.
那还有什么可能是危险的,应该删除?
我也找到了这个列表: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
Run Code Online (Sandbox Code Playgroud)
Jon*_*uhn 13
您永远不应该运行由用户输入定义的函数.用户可以通过数百万种方式伪装您无法阻止的函数名称.例如,您可以将函数名称保存到变量中,并使用变量运行函数.
<?php
$test = "readfile";
$test("somePageWithDatabasePassword.php");
?>
Run Code Online (Sandbox Code Playgroud)
这完全有效.如果你认为你可以测试从变量运行的函数,可以使用chr(),连接,十六进制等等.
我从用户输入将php函数存储到mySQL数据库,这些函数需要能够执行.
这是一个糟糕的主意.编译"安全"函数列表将非常困难,并且PHP充满了本地漏洞,任何知识渊博的人都可以利用这些漏洞.
即使是白名单也很难; 很难检测出$a = 'exe'; $a .= 'c'; $a('echo foo');会调用的代码exec.考虑一种不涉及存储可执行代码的替代策略.
| 归档时间: |
|
| 查看次数: |
4697 次 |
| 最近记录: |