知识屋:更实用的电脑技术知识网站
所在位置:首页 > 网络安全 > 安全资讯

PHP网站安全开发要点

发布时间:2012-12-01 00:32:03作者:知识屋

1、参数化查询
需要操作数据库,务必通过参数传递值,避免SQL语句拼接导致SQL注入漏洞。
2、输入验证
1)对数据进行合法性检查;
2)对数据进行精确匹配;
3)接受白名单的数据;
4)拒绝黑名单的数据;
5)对匹配黑名单的数据进行编码。
       在PHP中可由用户输入的变量列表如下:
$_SERVER
$_GET
$_POST
$_COOKIE
$_REQUEST
$_FILES
$_ENV
$_HTTP_COOKIE_VARS
$_HTTP_ENV_VARS
$_HTTP_GET_VARS
$_HTTP_POST_FILES
$_HTTP_POST_VARS
$_HTTP_SERVER_VARS
3、服务端数据校验
      对于敏感数据的提交和传递,应该在服务端进行校验,以避免客户端绕过。
4、Cookie安全
PHP中可以使用Setcookie函数设置cookie的httponly属性,以避免潜在的跨站脚本攻击漏洞盗取用户cookie从而冒用身份发起进一步攻击。
5、登陆安全
      1)验证方式
      应至少验证用户名、密码和验证码,有条件可以验证动态口令、手机动态密码。
     2)验证流程
     应遵循顺序、模糊的思想。首先验证验证码、其后匹配账号和密码。
     3)验证错误信息
     不应给出过于具体的错误信息,如用户名错误、密码错误等。
     4)基于用户名锁定而非IP
  为避免攻击者更换IP绕过锁定,应记录用户登陆行为,并对连续多次登陆错误的用户名进行临时锁定。
6、文件上传安全
  文件上传存在被利用上传webshell的风险,应该加强控制。建议采取以下措施:
  1)使用白名单方式检测文件后缀;
  2)不使用原文件名。上传之后按时间能算法生成文件名;图片文件可使用Getimagesize获取的mime来给予图片类文件拓展名;
  3)上传目录脚本文件不可执行;
  4)对于图片上传,可以使用PHP GD库重绘图片。
7、URL设计安全
  1)为降低被攻击风险,登陆和管理地址应使用不易被猜到的URL;
  2)为降低被猜解风险,重置密码链接应一次有效且随机不易被猜解;
8、使用强加密算法加密敏感信息
  即使存在SQL注入漏洞,导致密码密文被猜解,攻击者也很难获得对应的明文,从而降低管理后台被攻击的风险;
  即使数据库经其他途径泄露,也为暴力猜解增加了不小难度。
9、敏感操作页面置隐藏页面hash
  为避免请求伪造漏洞造成非主观的敏感操作,应该在敏感操作页面设置隐藏hash,验证敏感操作的合法性,避免伪造请求。
10、统一的错误处理
  网站应使用统一的错误处理机制,屏蔽详细的错误信息,避免造成敏感信息泄露。
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜