大家都知道 PHP 已经是当前最流行的 web 应用编程语言了但是也与其他脚本语言一样, PHP 也有几个很危险的安全漏洞所以在这篇教学文章中, 我们将大致看看几个实用的技巧来让你避免一些常见的 PHP 安全问题
技巧 1: 使用合适的错误报告
一般在开发过程中, 很多程序员总是忘了制作程序错误报告, 这是极大的错误, 因为恰当的错误报告不仅仅是最好的调试工具, 也是极佳的安全漏洞检测工具, 这能让你把应用真正上线前尽可能找出你将会遇到的问题
当然也有很多方式去启用错误报告比如在 php.in 配置文件中你可以设置在运行时启用
启动错误报告
error_reporting(E_ALL);
停用错误报告
error_reporting(0);
技巧 2: 不使用 PHP 的 Weak 属性
有几个 PHP 的属性是需要被设置为 OFF 的一般它们都存在于 PHP4 里面, 而在 PHP5 中是不推荐使用的尤其最后在 PHP6 里面, 这些属性都被移除了
注册全局变量
当 register_globals 被设置为 ON 时, 就相当于设置 Environment,GET,POST,COOKIE 或者 Server 变量都定义为全局变量此时你根本不需要去写 $_POST[username'] 来获取表单变量'username', 只需要'$username'就能获取此变量了
那么你肯定在想既然设置 register_globals 为 ON 有这么方便的好处, 那为什么不要使用呢? 因为如果你这样做将会带来很多安全性的问题, 而且也可能与局部变量名称相冲突
比如先看看下面的代码:
代码如下:
- if( !empty( $_POST[username'] ) && $_POST[username'] == test123 && !empty( $_POST[password'] ) && $_POST[password'] == pass123 )
- {
- $access = true;
- }
如果运行期间, register_globals 被设置为 ON, 那么用户只需要传输 access=1 在一句查询字符串中就能获取到 PHP 脚本运行的任何东西了
在. htaccess 中停用全局变量
代码如下:
php_flag register_globals 0
在 php.ini 中停用全局变量
代码如下:
register_globals = Off
停用类似 magic_quotes_gpc, magic_quotes_runtime, magic_quotes_sybase 这些 Magic Quotes
在. htaccess 文件中设置
代码如下:
- php_flag magic_quotes_gpc 0
- php_flag magic_quotes_runtime 0
在 php.ini 中设置
代码如下:
- magic_quotes_gpc = Off
- magic_quotes_runtime = Off
- magic_quotes_sybase = Off
技巧 3: 验证用户输入
你当然也可以验证用户的输入, 首先必须知道你期望用户输入的数据类型这样就能在浏览器端做好防御用户恶意攻击你的准备
技巧 4: 避免用户进行交叉站点脚本攻击
在 Web 应用中, 都是简单地接受用户输入表单然后反馈结果在接受用户输入时, 如果允许 html 格式输入将是非常危险的事情, 因为这也就允许了 JavaScript 以不可预料的方式侵入后直接执行哪怕只要有一个这样漏洞, cookie 数据都可能被盗取进而导致用户的账户被盗取
技巧 5: 预防 SQL 注入攻击
PHP 基本没有提供任何工具来保护你的数据库, 所以当你连接数据库时, 你可以使用下面这个 mysqli_real_escape_string 函数
代码如下:
- $username = mysqli_real_escape_string( $GET[username'] );
- mysql_query( SELECT * FROM tbl_employee WHERE username = '.$username.);
好了, 在这篇简短的文章中, 我们阐述了几个开发过程中不能忽视的 PHP 安全性问题但是最终是否使用, 如何使用还是开发人员来决定的希望这篇文章能帮助到你们
来源: https://www.php1.cn/detail/php-576995b2c3.html