确保PHP安全 不能违反的四条安全规则
欢迎进入网络安全论坛,与300万技术人员互动交流 >>进入 如果您处理的是允许在数据库中输入较长条目的表单文本区,那么无法在客户端轻松地限制数据的长度。在数据到达 PHP 之后,可以使用正则表达式清除任何像十六进制的字符串。 清单 15. 防止十六进制字符
欢迎进入网络安全论坛,与300万技术人员互动交流 >>进入
如果您处理的是允许在数据库中输入较长条目的表单文本区,那么无法在客户端轻松地限制数据的长度。在数据到达 PHP 之后,可以使用正则表达式清除任何像十六进制的字符串。
清单 15. 防止十六进制字符串
以下为引用的内容: 登录后复制 登录后复制 登录后复制 <?php 登录后复制 登录后复制 登录后复制 if ($_POST['submit'] == "go"){ 登录后复制 $name = substr($_POST['name'],0,40); 登录后复制 //clean out any potential hexadecimal characters<br> 登录后复制 $name = cleanHex($name); 登录后复制 登录后复制 //continue processing.... 登录后复制 登录后复制 } 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 function cleanHex($input){ 登录后复制 登录后复制 $clean = preg_replace("![\][xX]([A-Fa-f0-9]{1,3})!", "",$input); return $clean; 登录后复制 } 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 ?> 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 |
您 可能会发现这一系列操作有点儿太严格了。毕竟,十六进制串有合法的用途,比如输出外语中的字符。如何部署十六进制 regex 由您自己决定。比较好的策略是,只有在一行中包含过多十六进制串时,或者字符串的字符超过特定数量(比如 128 或 255)时,才删除十六进制串。
跨站点脚本攻击
在跨站点脚本(XSS)攻击中,往往有一个恶意用户在表单中(或通过其他用户输入方式)输入信息,这些输入将恶 意的客户端标记插入过程或数据库中。例如,假设站点上有一个简单的来客登记簿程序,让访问者能够留下姓名、电子邮件地址和简短的消息。恶意用户可以利用这 个机会插入简短消息之外的东西,比如对于其他用户不合适的图片或将用户重定向到另一个站点的 Javascrīpt,或者窃取 cookie 信息。
幸运的是,PHP 提供了 strip_tags() 函数,这个函数可以清除任何包围在 HTML 标记中的内容。strip_tags() 函数还允许提供允许标记的列表,比如 或 。
浏览器内的数据操纵
有一类浏览器插件允许用户篡改页面上的头部元素和表单元素。使用 Tamper Data(一个 Mozilla 插件),可以很容易地操纵包含许多隐藏文本字段的简单表单,从而向 PHP 和 MySQL 发送指令。
用户在点击表单上的 Submit 之前,他可以启动 Tamper Data。在提交表单时,他会看到表单数据字段的列表。Tamper Data 允许用户篡改这些数据,然后浏览器完成表单提交。
让我们回到前面建立的示例。已经检查了字符串长度、清除了 HTML 标记并删除了十六进制字符。但是,添加了一些隐藏的文本字段,如下所示:
清单 17. 隐藏变量
以下为引用的内容: 登录后复制 登录后复制 登录后复制 <?php 登录后复制 登录后复制 登录后复制 if ($_POST['submit'] == "go"){ 登录后复制 登录后复制 //strip_tags 登录后复制 $name = strip_tags($_POST['name']); 登录后复制 $name = substr($name,0,40); 登录后复制 //clean out any potential hexadecimal characters 登录后复制 $name = cleanHex($name); 登录后复制 登录后复制 //continue processing.... 登录后复制 登录后复制 } 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 function cleanHex($input){ 登录后复制 $clean = preg_replace("![\][xX]([A-Fa-f0-9]{1,3})!", "",$input); 登录后复制 登录后复制 return $clean; 登录后复制 登录后复制 } 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 ?> 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 |
注意,隐藏变量之一暴露了表名:users。还会看到一个值为 create 的 action 字段。只要有基本的 SQL 经验,就能够看出这些命令可能控制着中间件中的一个 SQL 引擎。想搞大破坏的人只需改变表名或提供另一个选项,比如 delete。
现在还剩下什么问题呢?远程表单提交。
远程表单提交
Web 的好处是可以分享信息和服务。坏处也是可以分享信息和服务,因为有些人做事毫无顾忌。
以 表单为例。任何人都能够访问一个 Web 站点,并使用浏览器上的 File > Save As 建立表单的本地副本。然后,他可以修改 action 参数来指向一个完全限定的 URL(不指向 formHandler.php,而是指向 http://www.yoursite.com/formHandler.php,因为表单在这个站点上),做他希望的任何修改,点击 Submit,服务器会把这个表单数据作为合法通信流接收。
首先可能考虑检查 $_SERVER['HTTP_REFERER'],从而判断请求是否来自自己的服务器,这种方法可以挡住大多数恶意用户,但是挡不住最高明的黑客。这些人足够聪明,能够篡改头部中的引用者信息,使表单的远程副本看起来像是从您的服务器提交的。
处理远程表单提交更好的方式是,根据一个惟一的字符串或时间戳生成一个令牌,并将这个令牌放在会话变量和表单中。提交表单之后,检查两个令牌是否匹配。如果不匹配,就知道有人试图从表单的远程副本发送数据。
要创建随机的令牌,可以使用 PHP 内置的 md5()、uniqid() 和 rand() 函数,如下所示:
清单 18. 防御远程表单提交
以下为引用的内容: 登录后复制 登录后复制 登录后复制 <?php 登录后复制 登录后复制 登录后复制 session_start(); 登录后复制 if ($_POST['submit'] == "go"){ 登录后复制 登录后复制 //check token 登录后复制 if ($_POST['token'] == $_SESSION['token']){ 登录后复制 //strip_tags 登录后复制 $name = strip_tags($_POST['name']); 登录后复制 $name = substr($name,0,40); 登录后复制 //clean out any potential hexadecimal characters 登录后复制 $name = cleanHex($name); 登录后复制 //continue processing.... 登录后复制 }else{ 登录后复制 //stop all processing! remote form posting attempt! 登录后复制 } 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 } 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 $token = md5(uniqid(rand(), true)); 登录后复制 $_SESSION['token']= $token; 登录后复制 function cleanHex($input){ 登录后复制 登录后复制 $clean = preg_replace("![\][xX]([A-Fa-f0-9]{1,3})!", "",$input); 登录后复制 登录后复制 return $clean; 登录后复制 登录后复制 } 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 ?> 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 登录后复制 |
这种技术是有效的,这是因为在 PHP 中会话数据无法在服务器之间迁移。即使有人获得了您的 PHP 源代码,将它转移到自己的服务器上,并向您的服务器提交信息,您的服务器接收的也只是空的或畸形的会话令牌和原来提供的表单令牌。它们不匹配,远程表单提交就失败了。
[1] [2] [3] [4]

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

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

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

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

Dreamweaver CS6
视觉化网页开发工具

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

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。
