5个 PHP 安全措施

迷途d书童 发布于 2012/07/12 12:25
阅读 4K+
收藏 64
多年来,PHP一直是一个稳定的、廉价的运行基于web应用程序的平台。像大多数基于web的平台一样,PHP也是容易受到外部攻击的。开发人员、数据库架构师和系统管理员在部署PHP应用程序到服务器之前都应该采取预防措施。大部分预防措施可以通过几行代码或者把应用程序设置稍作调整即可完成。

#1:管理安装脚本

如果开发人员已经安装了一套第三方应用程序的PHP脚本,该脚本用于安装整个应用程序的工作组件,并提供一个接入点。大多数第三方软件包都建议在安装后,删除该目录包含的安装脚本。但开发人员希望保留安装脚本,他们可以创建一个.htaccess文件来控制管理访问目录。
AuthType Basic
AuthName “Administrators Only”
AuthUserFile /usr/local/apache/passwd/passwords
Require valid-user
任何未经授权的用户,如果试图访问一个受保护的目录,将会看到一个提示,要求输入用户名和密码。密码必须匹配指定的“passwords”文件中的密码。

#2:头文件

在很多情况下,开发人员可以将分布在应用程序的几个脚本包含进一个脚本里。这些脚本将包含一个“include”指令,集成单个文件到原始页面的代码里。当“include”文件包含敏感信息,包括用户名、密码和数据库访问密钥时,该文件的扩展名应该命名成“.php ",而不是典型的“.inc”扩展。“.php”扩展确保php引擎将处理该文件,并防止任何未经授权的访问。

#3: MD5 vs. SHA

在某些情况下,用户最终会创建自己的用户名和密码,而站点管理员通常会对表单提交的密码加密,并保存在数据库中。在过去的几年中,开发人员会使用MD5(消息摘要算法)函数,加密成一个128位的字符串密码。今天,很多开发人员使用SHA-1(安全散列算法)函数来创建一个160位的字符串。

#4: 自动全局变量

php.ini文件中包含的设置称为“register_globals”。P服务器会根据register_globals的设置,将会为服务器变量和查询字符串自动创建全局变量。在安装第三方的软件包时,比如内容管理软件,像Joomla和Drupal,安装脚本将引导用户把register_globals设置为“关闭”。将设置改变为“关闭”可以确保未经授权的用户无法通过猜测变量名称及验证密码来访问数据。

#5: 初始化变量和值

许多开发人员都落入了实例化变量不赋值的陷阱,原因可能由于时间的限制而分心,或缺乏努力。身份验证过程中的变量,应该在用户登录程序开始前就有值。这个简单的步骤可以防止用户绕过验证程序或访问站点中某些他们没有权限的区域。

 

英文原文 , OSChina.NET编译

加载中
0
BossKiller
BossKiller
PHP的 Sha1 返回40位的结果。
BossKiller
BossKiller
我错了,真心错了。40个字节,说成40位了。
悟庭
悟庭
不想吐槽你,php返回的是40位16进制数串。换算成2进制,正好是160位,这里指的是2进制。 同样,md5返回的是32位的16进制串,换算成2进制,就是128位。常识问题。
苏生不惑
苏生不惑
sha1后还会处理才成160位
0
我土鳖

引用来自“张敏峰”的答案

PHP的 Sha1 返回40位的结果。

40个16进制数字=160位2进制值。
记得md5和sha1都能输出binary,可以不用字符串的。

彭坤
彭坤
不纠结这个,总之密码加密后保存是一定的。
0
开开心心打酱油
开开心心打酱油
还是个人开发习惯的问题
0
f
freewinger

這么多文章

這篇能夠熟練做到

bug率下降90%

0
32789mm3600
32789mm3600

密码存储我个人用

 md5($pre_salt . sha1($password) . $suf_salt);

32789mm3600
32789mm3600
回复 @苏翰 : md5($pre_salt . sha1($password) . $suf_salt); 还是这样啊,$pre_salt,$suf_salt都是固定的
苏生不惑
苏生不惑
怎么比对密码呢?谢谢
0
byhard
byhard
学习啦,我有个个人站,我想直接将用户名和密码加密后的字符串写到文件里,作为变量存储。大家认为安全吗?不想用数据库,反正我一个人用,简单。
0
剑客落落
剑客落落
给MD5加密的时候来个加盐值,就绝对安全了,即时拿到了密码,不知道加盐值,还那是无法破解密码,所以即使用户用同一个密码,生成的字符串也会不相同,你就无法创建数据字典暴力破解了。。
苏生不惑
苏生不惑
怎么加盐加密,第一次听说,谢谢
剑客落落
剑客落落
@左家梓 放数据库做什么,直接放配置文件里不就行么?站长为自己的网站设置一个固定的盐值即可。如果你觉得放配置文件也不安全那就真没什么说的,因为你链接数据库之类的密码都通常不都是放配置文件么
麦当苗儿
麦当苗儿
不要相信什么绝对安全,任何事情都是相对的。请问你的掩值放在哪里? 像DZ做的掩值就毫无意义,和密码放在用一个表,能拿到密码还不嫩拿到掩值 ?
0
麦健成
麦健成
.htaceesss的确很实用的方法
返回顶部
顶部