当前位置:首页 > 安全 > 正文

web开发安全准则

对于PHP完全方面:
网页安全的核心总结为8个字:过滤输入,转义输出,说白点就是不要相信任何用户的输入

下面是一些PHP程序员必须牢记的安全准则:

1. 数字型参数使用类似intval,floatval这样的方法强制过滤,这点比较好实现。

2. 字符串型参数使用类似mysql_real_escape_string这样的方法强制过滤,而不是简单的addslashes。
mysql_real_escape_string文档中的定义是:转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集;
本函数将 unescaped_string中的特殊字符转义,并计及连接的当前字符集,因此可以安全用于 mysql_query()。注意它并不转义%和_

3. 最好抛弃mysql_query这样的拼接SQL查询方式,尽可能使用PDO的prepare绑定方式。(补充1)
什么是PHP DATA Objects(PDO)呢?定义了一种轻量的,稳定的处理数据库的PHP接口,每个数据库启动执行PDO接口。由于默认是需要启动PDO扩展,所以一般情况下用的不是很多。

4. 使用rewrite技术隐藏真实脚本及参数的信息,通过rewrite正则也能过滤可疑的参数。使用.htaccess可以对url进行各种过滤;

5. 在php.ini中设置magic_quotes_gpc=on。magic_quotes_gpc指令只能在系统级关闭,不能在运行时。也就是说不能用 ini_set()。到底什么是魔术引号呢?(PHP 5.3以上的版本,取消了该选项,强制设置为on)
当打开时,所有的’, “, \, NULL字符串都会被自动加上一个反斜线进行转义,也就是说addslashed()作用相同;
魔术引号(Magic Quote)是一个自动将进入 PHP 脚本的数据进行转义的过程。最好在编码时不要转义而在运行时根据需要而转义。
magic,一般用的很多的是magic_quotes_gpc影响到GET, POST, COOKIE

6. 关闭错误提示,不给攻击者提供敏感信息:display_errors=off。

7. 以日志的方式记录错误信息:log_errors=on和error_log=filename,定期排查,Web日志最好也查。

8. 不要用具有FILE权限的账号(比如root)连接MySQL,这样就屏蔽了load_file等危险函数。
(补充:即使使用拼接SQL的方式,最好也用sprintf进行拼装,在明确需要数字的地方使用“%d”,会自动将对应的参数转换成数字。如同PDO的prepare如何防止SQL注入。)

对于web方面:

1、常见WEB漏洞(公司曾经专门举办类似的活动进行操作)
(1)SQL注入攻击:对用户输入的参数未做过滤就带入SQL语句导致的(mysql_real_escape()等方法)
(2)XSS攻击:黑客能够注入恶意代码到网页使得正常用户执行恶意代码,恶意代码在客户端浏览器执行,解决方案:对所有出现在字符串中的HTML tag进行过滤
(3)CSRF攻击:跨站请求伪造,解决方案:使用验证码、Referer、Form token
(4)跳转:在跳转前验证跳转的目标地址是否为合法站点
(5)信息泄露(接触不多)
(6)目录遍历(接触不多)
(7)后台:不要将管理后台开放在外网
(8)上传漏洞(可能会将一些可执行文件传到服务器)
(9)Info
(10)第三方模版

2、漏洞检测策略
(1)踩点准备,摸清流程,任何程序都可能会有漏洞;
(2)寻找带参数的CGI程序,有参数就会有各种检测,也会带来漏洞;
(3)提交各种BT的参数
(4)提交程序异常和正常的参数校验
(5)使用网络工具辅助分析
(6)使用专业扫描器缩小目标
(7)由此及彼的推测,或者旁敲侧击
(8)Google Hacking技术,简单的讲,就是在google.com中搜索某个站点,intext: cache: filetype: inurl: site:
Google Hacking的含义原指利用Google Google搜索引擎搜索信息来进行入侵的技术和行为;
现指利用各种搜索引擎搜索信息来进行入侵的技术和行为;

1 条评论

  1. 沙发2014-07-21 下午9:13回复
    admin

    1. 配置open_basedir项为网站目录

    2. 禁用危险函数disable_functions

    3. 关闭全局变量register_globals

    4. 开启magic_quotes_gpc

    5. 安全模式safe_mode

    PHP5.3之前版本:开启

    PHP5.3及之后的版本:关闭(已废除)

    6. 关闭错误消息提示display_errors

    7. 禁止访问远程文件allow_url_fopen,allow_url_include

发表评论