关于PHP安全编程的一些建议
简介
要提供互联网服务,当你在开发代码的时候必须时刻保持安全意识。可能大部分 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['username']
或 $_GET['username']
访问它节省击键次数。不幸的是,这也会给你留下安全问题,因为 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['username']
。如果 username 在 URL 中就使用$_GET['username']
。如果你不确定值来自哪里,用 $_REQUEST['username']
。
<?php $post_value = $_POST['post_value']; $get_value = $_GET['get_value']; $some_variable = $_REQUEST['some_value']; ?>
$_REQUEST
是 $_GET
、$_POST
、和 $_COOKIE
数组的结合。如果你有两个或多个值有相同的参数名称,注意 PHP 会使用哪个。默认的顺序是 cookie
、POST
、然后是 GET
。
以上就是为大家整理的一些编程安全建议。更过相关问题请访问PHP中文网:https://www.php.cn/
以上是关于PHP安全编程的一些建议的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

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

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

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

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

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

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

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

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