PHP代码安全策略

文件系统安全

php如果具有root权限,且在脚本中允许用户删除文件,那么用户提交数据,不进行过滤,就非常有可能删除系统文件

<?php
// 从用户目录中删除指定的文件
$username = $_POST['user_submitted_name'];
$userfile = $_POST['user_submitted_filename'];
$homedir = "/home/$username";
unlink ("$homedir/$userfile");
echo "The file has been deleted!";
?>

上面的代码,假设用户提交的$userfile值是 ../etc/,那么/etc目录就会被删除 防范文件系统攻击,策略如下

  • 只给php有限的权限
  • 用户提交上来的变量要监测和过滤,不能包含文件路径等特殊字符
  • 尽量避免使用PHP操作文件(删除),如果有这方面的需求,那用户可删除文件也必须是系统生成的随机名称,不可被用户控制

数据库安全

数据库安全主要防范的是sql injection,即sql注入攻击,

提升数据库安全的策略如下:

  • 不用使用root帐号或者数据库所有者帐号连接数据库,连接数据库限定连接用户的ip
  • 使用php的pdo扩展,有效防止sql注入,除了安全方面的优势,php的pdo扩展在性能方面有有很大优势 请参看 http://php.net/manual/en/pdo.prepared-statements.php
  • 对一些敏感信息进行加密,常见的比如对密码进行加密

用户数据过滤

对用户数据过滤,可以防范XSS和CSRF攻击

  • 使用白名单(用户输入是固定模式)的方式 比如用户名只能使用数字字母,那么可以使用函数ctype_alnum判断
  • 对用户输入使用函数 htmlentities或者htmlspecialchars进行处理,输入url不允许传入非http协议
  • 用户身份验证使用令牌 token(csrf) http://htmlpurifier.org/ HTML Purifier 是开源的防范xss攻击的有效解决方案,

其他安全策略

  • 线上环境关闭错误报告(error_reporting,dislay_erros,可在php.ini中配置error_log路径,记录错误信息,这样有助于发现可能的用户攻击)
  • Register Globals,弃用(移除)的特性,不要使用
  • 魔术引号特性,不要开启,在PHP-5.4中已经被移除
  • 尽量使用PHP的最新版本,最新版本修复了已知的很多安全漏洞和bug

代码中严格遵守上述策略,基本能保证代码不会有太多的安全漏洞,能防范常见攻击。 欢迎补充。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python3爬虫100例教程

看一篇,学一篇,今日份的pandas,你该这么学!No.2

对象的方法就是,你能干啥 你能随风奔跑 你能跳过泥坑 你能用手指打98K 你还能跳C哩C

8420
来自专栏前端小叙

最新版windows安装支持输入shell命令的工具cygwin教程

首先去官网下载自己对应系统32位或64位系统版本安装包:https://cygwin.com/install.html

13720
来自专栏波波烤鸭

SpringBoot【整合Thymeleaf】

SpringBoot中推荐使用的前端模板框架是Thymeleaf,所以本文来介绍下怎样整合Thymeleaf。

31220
来自专栏Java3y

什么是DOM编程?(修订版)

DOM(Document Object Model)文档对象模型,是语言和平台的中立接口。。

21020
来自专栏Spark学习技巧

Linux 之 crontab 使用

crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要...

9920
来自专栏FreeBuf

你真的懂“抓包”吗?

在平时和其他大佬交流时,总会出现这么些话,“抓个包看看就知道哪出问题了”,“抓流量啊,payload都在里面”,“这数据流怎么这么奇怪”。这里出现的名词,都是差...

29960
来自专栏编程微刊

在HTML页面中引入公共的部分的代码

在做前端网页的时候,会涉及到很多界面,有的时候,这些界面都会有重复的代码,比如侧边栏菜单的重复代码,头部导航的 重复代码,底部的重复代码,这个时候,为了使每个页...

76030
来自专栏Java技术栈

Intellij IDEA 撸码最头大的问题。。

想栈长我当初从 Eclipse 转用 IDEA 真是纠结,放弃然后尝试了N次,不过现在已经算是转型成功了,可以完全脱离 Eclipse 撸码了,虽然说我现在真的...

11230
来自专栏CWIKIUS

Angular 文档中的修改链接是从哪里改的 原

aio\tools\transforms\templates\lib\githubLinks.html

10730
来自专栏dino.c的专栏

[WPF自定义控件]从ContentControl开始入门自定义控件

我去年写过一个在UWP自定义控件的系列博客,大部分的经验都可以用在WPF中(只有一点小区别)。这篇文章的目的是快速入门自定义控件的开发,所以尽量精简了篇幅,更深...

22340

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励