当前位置:首页 > Web开发 > 正文

针对PHP开发安适问题的相关总结

2024-03-31 Web开发

对付互联网应用的开发,作为开发者必需时刻服膺安适不雅观念,并在开发的代码中浮现。PHP脚本语言对安适问题并不太关心,出格是对大大都没有经验的开发者来说。每当你做任何涉及到财帛事务等交易问题时,都要出格注意安适问题的考虑。

安适掩护一般性要点

1、不相信表单

对付一般的Javascript前台验证,由于无法得知用户的行为,例如封锁了浏览器的javascript引擎,这样通过POST恶意数据随处事器。需要在处事器端进行验证,对每个php脚本验证通报到的数据,防备XSS打击和SQL注入

2、不相信用户

要假设你的网站接收的每一条数据都是存在恶意代码的,存在隐藏的威胁,要对每一条数据都进行清理

3、封锁全局变量

在php.ini文件中进行以下配置:register_globals = Off

如果这个配置选项打开之后,会呈现很大的安适隐患。例如有一个process.php的脚本文件,会将接收到的数据插入到数据库,接收用户输入数据的表单可能如下:

<input type="text" size="15" maxlength="64">

这样,当提交数据到process.php之后,php会注册一个$username变量,将这个变量数据提交到process.php,同时对付任何POST或GET请求参数,城市设置这样的变量。如果不是显示进行初始化那么就会呈现下面的问题:

<?php // Define $authorized = true only if user is authenticated if (authenticated_user()) { $authorized = true; } ?>

此处,假设authenticated_user函数就是判断$authorized变量的值,如果开启了register_globals配置,那么任何用户都可以发送一个请求,来设置$authorized变量的值为任意值从而就能绕过这个验证。

所有的这些提交数据都应该通过PHP预界说内置的全局数组来获取,包孕$_POST、$_GET、$_FILES、$_SERVER、$_REQUEST等,此中$_REQUEST是一个$_GET/$_POST/$_COOKIE三个数组的联合变量,默认的挨次是$_COOKIE、$_POST、$_GET。

保举的安适配置选项

error_reporting设置为Off:不要袒露错误信息给用户,开发的时候可以设置为ON
safe_mode设置为Off
register_globals设置为Off
将以下函数禁用:system、exec、passthru、shell_exec、proc_open、popen
open_basedir设置为 /tmp ,这样可以让session信息有存储权限,同时设置单独的网站根目录
expose_php设置为Off
allow_url_fopen设置为Off
allow_url_include设置为Off

SQL注入打击

对付操纵数据库的SQL语句,需要出格注意安适性,因为用户可能输入特定语句使得原有的SQL语句转变了成果。类似下面的例子:

$sql = "select * from pinfo where product = ‘$product‘";

此时如果用户输入的$product参数为:

39‘; DROP pinfo; SELECT ‘FOO

那么最终SQL语句就酿成了如下的样子:

select product from pinfo where product = ‘39‘; DROP pinfo; SELECT ‘FOO‘

这样就会酿成三条SQL语句,会造成pinfo表被删除,这样会造成严重的后果。

这个问题可以简单的使用PHP的内置函数解决:

$sql = "Select * from pinfo where product = ‘" . mysql_real_escape_string($product) . "‘";

防备SQL注入打击需要做好两件事:

对输入的参数总是进行类型验证

对单引号、双引号、反引号等特殊字符总是使用mysql_real_escape_string函数进行转义

但是,这里按照开发经验,不要开启php的Magic Quotes,这个特性在php6中已经铲除,总是本身在需要的时候进行转义。

防备根基的XSS打击

XSS打击不像其他打击,这种打击在客户端进行,最根基的XSS工具就是防备一段javascript脚本在用户待提交的表单页面,将用户提交的数据和cookie盗取过来。

XSS工具比SQL注入越发难以防护,各至公司网站都被XSS打击过,虽然这种打击与php语言无关,,但可以使用php来筛选用户数据到达掩护用户数据的目的,这里主要使用的是对用户的数据进行过滤,一般过滤失HTML标签,出格是a标签。下面是一个普通的过滤要领:

function transform_HTML($string, $length = null) { // Helps prevent XSS attacks // Remove dead space. $string = trim($string); // Prevent potential Unicode codec problems. $string = utf8_decode($string); // HTMLize HTML-specific characters. $string = htmlentities($string, ENT_NOQUOTES); $string = str_replace("#", "#", $string); $string = str_replace("%", "%", $string); $length = intval($length); if ($length > 0) { $string = substr($string, 0, $length); } return $string; }

这个函数将HTML的特殊字符转换为了HTML实体,浏览器在衬着这段文本的时候以纯文本形式显示。如<strong>bold</strong>会被显示为:

<STRONG>BoldText</STRONG>

上述函数的核心就是htmlentities函数,这个函数将html特殊标签转换为html实体字符,这样可以过滤大部分的XSS打击。

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/33154.html