首页 后端开发 php教程 关于PHP安全编程的一些建议

关于PHP安全编程的一些建议

Aug 20, 2019 am 10:27 AM
编程安全

简介

要提供互联网服务,当你在开发代码的时候必须时刻保持安全意识。可能大部分 PHP 脚本都对安全问题不在意,这很大程度上是因为有大量的无经验程序员在使用这门语言。但是,没有理由让你因为对你的代码的不确定性而导致不一致的安全策略。当你在服务器上放任何涉及到钱的东西时,就有可能会有人尝试破解它。创建一个论坛程序或者任何形式的购物车,被攻击的可能性就上升到了无穷大。

推荐PHP视频教程:https://www.php.cn/course/list/29/type/2.html

背景

为了确保你的 web 内容安全,这里有一些常规的安全准则:

1、别相信表单

攻击表单很简单。通过使用一个简单的 JavaScript 技巧,你可以限制你的表单只允许在评分域中填写 1 到 5 的数字。如果有人关闭了他们浏览器的 JavaScript 功能或者提交自定义的表单数据,你客户端的验证就失败了。

用户主要通过表单参数和你的脚本交互,因此他们是最大的安全风险。你应该学到什么呢?在 PHP 脚本中,总是要验证 传递给任何 PHP 脚本的数据。在本文中,我们向你演示了如何分析和防范跨站脚本(XSS)攻击,它可能会劫持用户凭据(甚至更严重)。你也会看到如何防止会玷污或毁坏你数据的 MySQL 注入攻击。

2、别相信用户

假定你网站获取的每一份数据都充满了有害的代码。清理每一部分,即便你相信没有人会尝试攻击你的站点。

3、关闭全局变量

你可能会有的最大安全漏洞是启用了 register_globals 配置参数。幸运的是,PHP 4.2 及以后版本默认关闭了这个配置。如果打开了 register_globals,你可以在你的 php.ini 文件中通过改变 register_globals 变量为 Off 关闭该功能:

register_globals = Off
登录后复制

新手程序员觉得注册全局变量很方便,但他们不会意识到这个设置有多么危险。一个启用了全局变量的服务器会自动为全局变量赋任何形式的参数。为了了解它如何工作以及为什么有危险,让我们来看一个例子。

假设你有一个称为 process.php 的脚本,它会向你的数据库插入表单数据。初始的表单像下面这样:

<input name="username" type="text" size="15" maxlength="64">
登录后复制

运行 process.php 的时候,启用了注册全局变量的 PHP 会将该参数赋值到 $username 变量。这会比通过$_POST[&#39;username&#39;]$_GET[&#39;username&#39;] 访问它节省击键次数。不幸的是,这也会给你留下安全问题,因为 PHP 会设置该变量的值为通过 GET 或 POST 的参数发送到脚本的任何值,如果你没有显示地初始化该变量并且你不希望任何人去操作它,这就会有一个大问题。

看下面的脚本,假如 $authorized 变量的值为 true,它会给用户显示通过验证的数据。正常情况下,只有当用户正确通过了这个假想的 authenticated_user() 函数验证,$authorized 变量的值才会被设置为真。但是如果你启用了 register_globals,任何人都可以发送一个 GET 参数,例如 authorized=1 去覆盖它:

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

这个故事的寓意是,你应该从预定义的服务器变量中获取表单数据。所有通过 post 表单传递到你 web 页面的数据都会自动保存到一个称为 $_POST 的大数组中,所有的 GET 数据都保存在 $_GET 大数组中。文件上传信息保存在一个称为 $_FILES 的特殊数据中。另外,还有一个称为 $_REQUEST 的复合变量。

要从一个 POST 方法表单中访问username字段,可以使用 $_POST[&#39;username&#39;]。如果 username 在 URL 中就使用$_GET[&#39;username&#39;]。如果你不确定值来自哪里,用 $_REQUEST[&#39;username&#39;]

<?php
$post_value = $_POST[&#39;post_value&#39;];
$get_value = $_GET[&#39;get_value&#39;];
$some_variable = $_REQUEST[&#39;some_value&#39;]; 
?>
登录后复制

$_REQUEST $_GET$_POST、和 $_COOKIE 数组的结合。如果你有两个或多个值有相同的参数名称,注意 PHP 会使用哪个。默认的顺序是 cookiePOST、然后是 GET

以上就是为大家整理的一些编程安全建议。更过相关问题请访问PHP中文网:https://www.php.cn/

以上是关于PHP安全编程的一些建议的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Intel TXT是什么? Intel TXT是什么? Jun 11, 2023 pm 06:57 PM

IntelTXT是Intel公司推出的一种硬件辅助安全技术,它可以通过在CPU和BIOS间建立一个受保护的空间,来确保服务器在启动时的完整性和安全性。TXT的全称是TrustedExecutionTechnology,也就是可信执行技术。简单来说,TXT是一种安全技术,它可以提供硬件级别的保护,确保服务器在启动时没有被恶意程序或未经授权的软件修改。这一

如何使用PHP预防HTTP响应拆分攻击 如何使用PHP预防HTTP响应拆分攻击 Jun 24, 2023 am 10:40 AM

HTTP响应拆分攻击(HTTPresponsesplittingattack)是一种利用Web应用程序处理HTTP响应的漏洞,攻击者通过构造恶意HTTP响应将恶意代码注入到合法响应中,来实现攻击用户的目的。PHP作为一门常用的Web开发语言,也面临着HTTP响应拆分攻击的威胁。本文将介绍如何使用PHP来预防HTTP响应拆分攻击。了解HTTP响应拆分攻击

比亚迪与Stingray合作打造令人安全愉悦的车载娱乐空间 比亚迪与Stingray合作打造令人安全愉悦的车载娱乐空间 Aug 11, 2023 pm 02:09 PM

比亚迪官方微信公众号发布消息称,比亚迪与音乐媒体科技公司Stingray达成合作协议,计划从2023年起在新能源汽车上引入Stingray交互式车载KTV产品,并在全球多个市场推广据报道,比亚迪与Stingray合作开发的娱乐系统将为比亚迪的新能源汽车增加更多娱乐功能,以满足用户多样化的需求。该娱乐系统将支持多种语言,提供用户友好的界面设计,使用户能够方便地按照歌曲的标题、艺术家、歌词或流派进行搜索。此外,该系统每月将自动更新曲目,为用户带来全新的音乐体验为了确保驾驶安全,当车辆处于驾驶模式时,

Nginx反向代理中的安全DNS解析 Nginx反向代理中的安全DNS解析 Jun 11, 2023 am 09:51 AM

随着网络应用的不断发展,我们需要越来越多的安全措施来保护我们的数据和隐私。其中,安全DNS解析是一项非常重要的措施,它可以保护我们不被恶意DNS服务器攻击。在Nginx反向代理中使用安全DNS解析也同样很重要。本文将讨论Nginx反向代理中的安全DNS解析,并介绍如何设置。什么是DNS解析?DNS(DomainNameSystem)解析是将域名转换为IP

如何防范网络键盘记录器? 如何防范网络键盘记录器? Jun 11, 2023 pm 03:03 PM

在互联网时代,信息泄漏已经成为了我们生活中非常普遍的现象。其中,网络键盘记录器是一种非常高效的黑客攻击工具,通过记录用户输入的内容,窃取用户账号密码等敏感信息,对个人隐私和财产造成威胁。因此,如何有效地防范网络键盘记录器,成为了我们互联网使用者所面临的一项重要挑战。本文将为大家介绍几种避免成为网络键盘记录器受害者的方法。定期更新操作系统和软件网络键盘记录器多

Nginx安全更新的一些建议 Nginx安全更新的一些建议 Jun 10, 2023 am 11:03 AM

Nginx是一个广泛使用的Web服务器和反向代理服务器,它具有可扩展的模块化结构和高效的性能优势。然而,就像其他软件一样,Nginx也有可能存在安全漏洞。为了保护网站的安全性,Nginx的安全更新非常重要。本文将介绍一些针对Nginx的安全更新建议。定期更新Nginx对于任何软件,更新是至关重要的。特别是对于Nginx这样的Web服务器和反向代理服务器,如果

AMD Secure Processor是什么? AMD Secure Processor是什么? Jun 11, 2023 pm 12:15 PM

AMDSecureProcessor是指一种用于加强计算机系统安全性的协处理器。该技术由全球知名的半导体制造商AMD开发,旨在提供更强的系统安全保护措施。AMDSecureProcessor的实现方式是将一个安全处理器集成于主处理器中,该安全处理器被设计用于执行安全相关的计算任务,并且拥有自己独立的内存和存储器,与主处理器相互隔离。这一协处理器的引入

微信支付安全性探究 微信支付安全性探究 Jun 11, 2023 am 08:57 AM

随着电子支付的流行,人们越来越依赖于手机支付宝或微信支付等移动支付平台。这些平台为消费者和商家提供了一种方便而快捷的支付方式,但同时,平台安全事关用户的资产和个人信息安全。在这篇文章中,我们将探究微信支付的安全性,以评估其在保护用户的个人信息和账户安全等方面的表现。首先,我们需要了解微信支付中的安全机制。微信支付遵循PCI-DSS(PaymentCard

See all articles