PHP安全编程

本文介绍如何在PHP开发中采用安全的编程策略,包括处理用户提交的数据、密码存储、文件系统安全等方面,有效防止XSS、CSRF攻击及SQL注入等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 . 外部策略

1.处理用户的提交的数据
  我们的网站(应用)每天通过各种途径接收大量的外部数据,如:

 $_GET , $_POST , $_REQUEST , $_COOKIE , $argv , php://stdin , php://input , file_get_contents

远程的数据库信息 , 远程API , 来自客户端的数据

以上的数据源都很可能被作为数据源插入到你的PHP脚本中从而造成:XSS和CSRF攻击以及SQL注入

解决方法:

过滤输入:使用htmlentities函数对数据进行过滤; 使用PDO预处理语句过滤数据,

验证数据:使用filter_var,filter_input函数去验证不同类型的数据

转义输出:使用htmlentities函数对数据进行转义再输出到页面上

2.处理用户的密码
 绝不可以把用户的密码明文储存到数据库,否则一旦数据库被黑后果就不堪设想
 加密与哈希:加密是双向算法,哈希是单向算法,哈希后的数据不能还原成原始值,最安全的哈希算法是bcrypt,
bcrypt算法会自动加盐,可以防止彩虹表攻击,在PHP编程中可以使用password_hash和password_verifty函数

二 .内部策略

1.文件系统安全
php如果具有root权限,且在脚本中允许用户删除文件,那么用户提交数据,不进行过滤,就非常有可能删除系统文件
// 从用户目录中删除指定的文件
$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操作文件(删除),如果有这方面的需求,那用户可删除文件也必须是系统生成的随机名称,不可被用户控制


三. 其他策略

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值