我正在做一个像codepad.org
这样的项目,输入一个php代码并编译它并给出error or output
我想禁用一些功能mysql_query
,如果有人使用它,然后想显示一些警告,比如mysql_query() is disabled for some security reasons
如何禁用这些功能?
在共享主机上,您有时仍有机会编译自己的 PHP 并将其安装在您的主目录中。通过这样做,您可以在编译时禁用某些库。并且可以访问您自己的php.ini 对应于您自己安装的PHP。
大多数情况下,在共享主机上,这意味着将您的 PHP 脚本作为 CGI 运行。与大的表现处罚。
顺便说一句,您提到了对SQL Injection的担忧。这是“滥用”您的代码来执行不需要的查询。这不是调用意外的 SQL函数。后者是代码注入,例如,如果您盲目地执行来自不受信任来源的代码(eval()
仅用于提及该来源),则可能是后者。如果你有这样的安全漏洞——你应该重新设计你的应用程序,而不是仅仅依靠“聪明的配置”或“补丁”来防止滥用。
在php.ini
设置safe_mode
/是
然后:
disable_functions = mysql_connect,system,exec,fopen,fputs,file_put_contents,mysql_query
在共享服务器上,如果不保护自己的虚拟根,您可能无法做到这一点。.htaccess 受服务器所有者设置的限制
你可以像.htaccess
这样改变php标志:
php_flag disable_functions = mysql_connect,system,exec,fopen,fputs,file_put_contents,mysql_query
(也许没有“=”)
它仍然取决于服务器配置
我的猜测是删除扩展名php.ini
:
改变:
extension=php_mysql.dll
extension=php_mysqli.dll
至:
;extension=php_mysql.dll
;extension=php_mysqli.dll
更新:
可能您可以使用 阻止您的 MySQL 服务器的 IP 地址.htaccess
,因此用户将无法连接到它。