6月1日任务

11.28 限定某个目录禁止解析php
11.29 限制user_agent

11.30/11.31 php相关配置

限定某个目录禁止解析php


数据泄露可能性

①网站php程序漏洞

②sql注入漏洞:可以把查询的sql,通过特殊提交到服务器上,服务器会把sql语句转换成正常查询,最终获得一些数据(容易修复,只要在网站提交的入口增加特殊符号过滤,达到阻断效果)

实例:


第一个大括号和第二个大括号之间的表示对/upload目录禁止解析php,防止被黑客等人拿到权限调走数据

第二个大括号则是对files match访问控制,让外界对这个/upload目录无法访问

测试:

①加了两层限制后的403 Forbidden


②只针对某个目录禁止解析php:如下图显示的是源代码,不解析


可写的目录(静态文件),一般情况下不需要解析php,一般静态文件所存放的目录下不允许放php

限制user_agent


在网站受到SYS攻击时(攻击人通过一些手段,如软件,肉机(被黑被控制的机器)同时访问一个站点)

限制user_agent的过于频繁访问请求,减轻服务器压力


NC表示忽略大小写 OR或者  F:Forbidden

测试成功

curl -A 再测试确定因为限制了user_agent



curl -A指定usr_agent  

curl -e 指定referer 必须以“http:// ”开头

curl -x 省略hosts

curl -I 返回状态码,不执行

PHP相关配置


在网站根目录下通过网页查看php.info(找php配置文件最准确)

①根目录下index.php编辑成php.info


②打开111.com/index.php显示具体页面信息(虽然配置文件是/usr/local/php7/etc,但是并没有加载)


③把源码包的php.ini拷贝到配置文件路径下,并刷新配置apachectl graceful



④打开配置文件 vim /usr/local/php7/etc/php.ini

disable_functions 禁掉一些危险函数,甚至phpinfo函数,有时不小心写了phpinfo的页面上传到网上,被黑客扫到可以看到系统信息,有潜在的深入挖掘渗透


禁掉后刷新发现phpinfo页面无法访问


定义date.timezone(如果不定义可能会有一些报警信息)


日志相关


因为有display_errors = On使得之前phpinfo被禁后的错误信息直接显示在网站上 (暴露目录地址),改成off比较安全,不需要把错误信息输出到浏览器中,参数改成Off后再重新加载配置,出现百页,无错误提示


用curl访问发现没有任何输出,这时候需要配置一个错误日志方便以后排错


配置错误日志信息

①/log_errors = On


②error_log = 定义到某目录下


③定义error_log的级别,如果不定义只会记录严重的错误,不会完全记录


最不严谨的就是所有都生成,然而在生产环境中,Notice很多,所以只要选择log 错误就行了


生成php_errors.log 属主于daemon,ps aux |grep httpd查看,也是httpd的属主,实际上以进程的身份生成(应用:如果定义了一个错误日志,但是始终没有生成,应该排查定义错误日志所在的目录是否有写的权限,此处写文件的“人”是apache所属主,启动用户daemon)


为了保险起见可以先grep查看错误日志的定义路径,先touch,再改777权限


cat这个Log发现


模拟一个错误:新编辑一个2.php文件(语法错误),然后curl后没有任何提示,再cat发现错误详情


安全相关参数 


open_basedir主要用来限定并隔离站点与站点之间的目录 (比如一台服务器跑N个站点,其中一个漏洞多被黑被拿到权限,增加open_basedir  可以避免扩散)

找到open_basedir选项,把文件目录限制在/tmp下


如果定义错了,如1111.com看看实验结果,curl结果是500错误, Internal Server Error


查看错误日志: cat /tmp/php_errors.log


改成正确的路径 /data/wwwroot/111.com:/tmp; curl后正常


如果一个服务器跑N个站点,如何限定?所有网站根目录都在/data/wwwroot/下,如果限定在这一层不行,又由于php.ini配置文件是针对所有站点生效,所以需要到单个站点上配置open_basedir,即在vhost(apache虚拟主机)配置文件中个性化针对  某站点进行限制

php_admin_value参数可以定义php.ini里的一些参数(如error_log, error_reporting等等)


限制在/tmp/目录下的原因是:默认所有临时文件等都会先保存在/tmp/下,如图片上传是先传到/tmp/下再到相应的路径,这样达到隔离效果




apache开启压缩 http://ask.apelearn.com/question/5528

apache2.2到2.4配置文件变更 http://ask.apelearn.com/question/7292

apache options参数 http://ask.apelearn.com/question/1051
apache禁止trace或track防止xss http://ask.apelearn.com/question/1045
apache 配置https 支持ssl http://ask.apelearn.com/question/1029

猜你喜欢

转载自blog.csdn.net/fuel91/article/details/80550246