PHP 给予开发者极大的灵活性,但也带来了安全问题的潜在风险,最近需要对之前的问题进行总结,这里翻译一篇文章,并加入一些自己的开发经验进行总结。
在开发互联网服务时,你必须时刻牢记安全性,并将其体现在你开发的代码中。PHP 脚本语言并不关心安全问题,尤其是对于大多数没有经验的开发人员来说。每当你谈到任何涉及金钱等交易的事情时,都要特别注意安全问题,比如开发一个论坛或购物车。
一般安全提示
不要相信表格
对于一般的前端验证,由于无法得知用户的行为,比如关闭浏览器引擎,恶意数据可以POST到服务器,需要在服务器端进行验证,对每个PHP脚本传递的数据进行验证,防止XSS攻击和SQL注入
不要相信用户
假设您的网站收到的每条数据都包含恶意代码和隐藏的威胁,并清理每条数据。
关闭全局变量
在php.ini文件中进行以下配置:
= 关闭
如果开启这个配置选项,会存在很大的安全风险,比如有一个.php脚本文件,会把接收到的数据插入到数据库中,接收用户输入数据的表单可能如下:
这样,当数据提交到.php时,php会注册一个$变量,并将这个变量数据提交到.php,同时,对于任何POST或者GET请求参数都会设置这样的变量,如果没有显式地初始化,就会出现以下问题:
这里假设该函数的作用是判断$的值,如果开启该配置,那么任何用户都可以发送请求将$的值设置为任意值,以绕过此验证。
这些提交的数据都要通过PHP预定义的内置全局数组来获取,包括$_POST、$_GET、$、$、$等,其中$是$_GET/$_POST/$三个数组的联合变量,默认顺序为$、$_POST、$_GET。
推荐的安全配置选项
设置为 Off:不向用户显示错误消息。您可以在开发过程中将其设置为 ON。
设置为关闭
设置为关闭
禁用以下功能:,exec,,,popen
将其设置为 /tmp,以便信息具有存储权限,并设置单独的网站
根目录
设置为关闭
设置为关闭
设置为关闭
SQL 注入攻击
对于操作数据库的SQL语句,要特别注意安全性,因为用户可能会输入特定的语句,改变原有SQL语句的功能。类似下面的例子:
$sql = " * 来自 pinfo 其中 = '$'";
此时如果用户输入的$参数是:
39'; DROP pinfo; 'FOO
那么最终的SQL语句就变成如下:
来自 pinfo where = '39'; DROP pinfo; 'FOO'
这样就会产生三条SQL语句,导致pinfo表被删除,后果很严重。
使用 PHP 的内置函数可以轻松解决这个问题:
$sql = ' * 来自 pinfo 其中 = '"'
戒指($).'"';
为了防止SQL注入攻击,你需要做两件事:
始终对输入参数执行类型验证
特殊字符(例如单引号、双引号、反引号等)始终使用 ring 函数进行转义
但是根据开发经验,请不要启用 PHP Magic。该功能在 PHP6 中已被废除,需要时请始终退出。
防止基本 XSS 攻击
XSS攻击与其他攻击不同,这种攻击是在客户端进行的,最基本的XSS手段就是在用户即将提交的表单页面上,阻止某个脚本窃取用户提交的数据。
XSS 工具比 SQL 注入更难防护,各大公司网站都曾遭受过 XSS 攻击,虽然这种攻击和 PHP 语言无关,但是 PHP 可以用来过滤用户数据,保护用户数据,这里主要目的是对数据进行过滤,一般是过滤掉 HTML 标签,特别是 a 标签,下面是常见的过滤方法:
($, $ = 空) {
// 帮助 XSS
// 死空间。
$ = 修剪($);
// 编解码器。
$ = ($);
// HTML- .
$ = ($, );
$ = ("#", "#", $);
$ = ("%", "%",$);
$ = ($);
如果 ($ > 0) {
$ = ($,0,$);
$;
此函数将 HTML 特殊字符转换为 HTML 实体,浏览器在渲染此文本时将其显示为纯文本。例如,粗体将显示为:
上述函数的核心就是函数,将HTML特殊标签转换成HTML实体字符,可以过滤大部分的XSS攻击。
不过,经验丰富的XSS攻击者还有更巧妙的攻击方式:将他们的恶意代码用十六进制或utf-8格式进行编码,而不是普通的ASCII文本。例如,可以使用下面的方法:
65%74%68%69%6e%67%6d%61%6c%69%63%69%6f%75%73%3c%2f%53%43%52%49%50%54%3e">
浏览器渲染的结果其实是:
这样就达到了攻击的目的,为了防止这种情况,需要根据函数将#和%转换成对应的实体符号,并增加$参数限制提交数据的最大长度。
用于防止XSS攻击
上述针对XSS攻击的防护很简单,但是并没有涵盖所有用户的标签,绕过过滤功能提交代码的方法有上百种,没有办法完全杜绝这种情况。
目前还没有哪个脚本可以保证不被攻击,但总有相对完善的防护措施。安全防护有两种方式:白名单和黑名单。白名单比较简单有效。
白名单解决方案应该足够智能,能够识别有效的 HTML,然后删除任何危险标签。这需要对每个包进行解析。
安装方法:
1. 前往下载最新的
2. 将文件放入服务器的目录中,其中包含所有库
3. 将类文件包含在你自己的脚本中
4. 创建对象
5.使用parse方法进行过滤
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。