php安全开发 添加随机字符串验证,防止伪造跨站
跨站请求伪造是一种难以防范且具有巨大危害的网络攻击方式。攻击者可以通过这种方式进行恶作剧、发送垃圾信息、删除数据等恶意行为。那么,我们该如何有效防范这种攻击呢?
Yahoo和Facebook等互联网公司采取了在表单中加入随机字符串的措施来应对这一问题。这种随机字符串通常被称为“Crumb”。在涉及到用户写操作的表单中,加入一个随机且频繁变换的字符串,并在处理表单时对这个字符串进行检查,是一种常见且有效的防御手段。
如果随机字符串与当前用户的身份相关联,那么攻击者伪造请求的难度就会大大增加。当前,大多数防范方法都是基于这一思路展开的。
接下来,我们将根据这一思路,山寨一个简单的Crumb生成与验证的PHP代码实现。这段代码的主要思路是创建一个名为Crumb的类,其中包括生成Crumb、验证Crumb等功能。
我们定义一个常量SALT,用于生成Crumb时提供密钥。我们设定一个时间阈值TTL,表示这个随机串的有效时间。
在Crumb类中,我们定义了三个方法:challenge、issueCrumb和verifyCrumb。其中,challenge方法用于生成一个基于输入数据的哈希值;issueCrumb方法用于根据用户ID和动作生成一个Crumb;verifyCrumb方法则用于验证传入的Crumb是否合法。
具体来说,issueCrumb方法会根据当前时间、动作和用户ID生成一个Crumb。这个Crumb在验证时,会与根据当前时间或上一时间生成的Crumb进行比较,如果匹配则验证通过。
通过这种方式,我们可以有效地防止跨站请求伪造攻击。因为即使攻击者能够猜测到正确的动作和用户ID,也很难在短时间内猜测到正确的Crumb,因为Crumb是动态变化的。
防范跨站请求伪造攻击的关键在于增加攻击者的难度,而加入动态变化的随机字符串是一种有效的手段。通过合理的设置和管理,我们可以大大提高系统的安全性,防止恶意攻击。构造表单:在表单中嵌入一个隐藏的随机串crumb
```html
```
处理表单的demo.php文件会对接收到的crumb进行检查:
```php
if(Crumb::verifyCrumb($uid, $_POST['crumb'])) {
// 如果crumb验证通过,按照正常流程处理表单数据
// 进行相应的数据处理和操作
} else {
// 如果crumb验证失败,进入错误提示流程
// 显示错误信息,或者进行其他错误处理操作
}
?>
```
在这段PHP代码中,我们首先使用Crumb类的verifyCrumb方法对用户提交的crumb进行验证。如果验证通过,就按照正常的流程处理表单数据;如果验证失败,就进入错误提示流程,告知用户表单提交可能存在问题。
这种使用随机串crumb的方式可以有效防止恶意用户通过非法手段提交表单,提高网站的安全性。通过丰富的文本内容和清晰的代码示例,我们可以更加生动地解释这个技术细节,让读者更容易理解。本文来自包子博客的分享,旨在为开发者提供实用的技术知识和经验。
编程语言
- php安全开发 添加随机字符串验证,防止伪造跨站
- jqTransform美化表单
- Jquery Easyui自定义下拉框组件使用详解(21)
- php 获取今日、昨日、上周、本月的起始时间戳和
- JavaScript动态添加数据到表单并提交的几种方式
- mysql巡检脚本(必看篇)
- C、C++、Java到Python,编程入门学习什么语言比较好
- 基于jQuery实现二级下拉菜单效果
- [PHP]常用正则表达式收集
- PHP实现将base64编码字符串转换成图片示例
- 正则表达式合集和工具any-rule的使用
- 在点击div中的p时,如何阻止事件冒泡
- Bootstrap项目实战之子栏目资讯内容
- 微信小程序排坑指南详解
- Mysql存储引擎详解
- 常常会用到的截取字符串substr()、substring()、sli