当浏览器重新加载/返回时,如何防止数据库被再次写入?

2023-11-27

我正在编写一个小型 Web 应用程序,用于写入数据库(Perl CGI 和 MySQL)。 CGI 脚本从表单中获取一些信息并将其写入数据库。然而,我注意到,如果我在网络浏览器上点击“重新加载”或“返回”,它会再次将数据写入数据库。我不想要这个。

在这种情况下,防止数据被重写的最佳方法是什么?


不要使用 GET 请求进行修改!是RESTful;使用 POST(或 PUT)代替,浏览器应警告用户不要重新加载请求。重定向(使用 HTTP 重定向) 在 POST/PUT 请求之后使用普通 GET 请求发送到收据页面将可以刷新页面,而不会收到有关重新提交的警告。

EDIT:

我假设用户已以某种方式登录,因此您已经有了某种跟踪用户的方法,例如会话或类似的。

当显示将其存储为隐藏字段(除了反跨站请求令牌之外,我确信您已经拥有了),并且在会话变量(安全地存储在您的服务器上)中,当您收到此表单的 POST/PUT 请求时,您会检查时间戳是否与会话中的时间戳相同。如果是,您可以将会话中的时间戳设置为某个变量且难以猜测(例如与某些秘密字符串连接的时间戳),然后您可以保存表单数据。如果有人现在重复请求,您将不会在会话变量中找到相同的值并拒绝该请求。

这样做的问题是,如果用户单击返回更改某些内容,则表单无效,并且可能有点苛刻,除非您要更新的是金钱。因此,如果您遇到“愚蠢”用户刷新并单击后退按钮从而意外重新发布某些内容的问题,只需使用 POST 就会提醒他们不要这样做,而重定向会降低这种情况的可能性。如果您遇到恶意用户的问题,您也应该使用时间戳,尽管它有时会让用户感到困惑,尽管如果用户故意一遍又一遍地发布相同的消息,您可能需要找到一种方法来禁止他们。如果恶意用户只是编写一个脚本来自动加载表单并提交随机垃圾,那么使用 POST、设置时间戳,甚至对整个数据库进行全面比较来检查重复的帖子,都毫无帮助。 (但是跨站点请求保护使这变得更加困难)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当浏览器重新加载/返回时,如何防止数据库被再次写入? 的相关文章

  • 这可以一行完成吗?

    我像这样提取MAC地址 my tmp split domain 123 123 123 123 at 00 11 22 33 44 55 ether on eth0 my vip tmp 3 但不使用临时变量可以完成吗 是的 它可以 my
  • 关于ORA 21000

    我正在与 ORA 21000 作斗争 上面写着ORA 21000 raise application error 的错误号参数 3739 超出范围 此错误间歇性出现 我不知道为什么会发生这种情况 早些时候这工作得很好 但是从 Solaris
  • 在 MySQL 中对连续值进行分组并向这些组添加 id

    我有一个简单的表 我需要确定四行的组 这些组不是连续的 但每行的每一行的值都有 1 例如 language id C 16 C 17 Java 18 Python 19 HTML 65 JavaScript 66 PHP 67 Perl 6
  • 用于只读 DB 的 java ORM

    我了解 hibernate 但我想知道是否有一个更轻的 ORM 引擎只读数据库 我的意思是 我不需要一些事务查询或更新一些记录 另一方面 我需要处理一些大的记录列表 List
  • 数百个别名/同义词与数据库表的完全限定名称

    考虑到多个模式中的数百个数据库表 在创建存储过程和视图时 您是否建议使用别名 同义词或完全限定名称 给定一些 schema table 像这样 Orders OrderHeader Production LineThroughput Sal
  • 使用perl,在每行都有相同单词的情况下如何选择最后两行?

    Bini 21 89753 20 47853 20 27835 18 34952 16 23454 Bini 16 89753 14 47853 13 27835 12 34952 11 23454 Bini 10 09014 我的文件有一
  • 如何比较两个文件中的多列并在找​​到匹配时从另一列检索相应的值

    我有两个文件 File1 txt 和 File2 txt 我需要将 File1 中的三列 1 2 和 3 分别与 File2 的 4 5 和 6 进行比较 如果找到匹配项 我想从 File2 的第 2 列中检索相应的值并将其粘贴到输出中 T
  • PostgreSQL 中字符串列类型的索引数组

    是否可以在类型为的列上创建索引文本数组 尝试使用GIN索引 但查询似乎没有使用这些索引 Example CREATE TABLE users name VARCHAR 100 groups TEXT Query SELECT name FR
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • CloudKit 通过 cron 作业发送推送通知?

    我正在创建一个大学餐饮菜单应用程序 在其中我需要根据每日菜单发送推送通知 最初 我计划通过 Heroku 将用户数据存储在数据库中 并使用 cron 作业将数据库中的数据与每日菜单进行比较 并向用户发送适当的通知 然而 在 Cloudkit
  • Sequelize.js - “不关联到”

    我在从数据库获取完整数据时遇到一些问题 那是我的模型 User module exports function sequelize DataTypes return sequelize define user id type DataTyp
  • Perl YAML 模块无法识别标量类型

    我加载以下 yaml 文件 foo bar s 1 hx 0x34 用这段代码 use YAML qw LoadFile Dump use Data Dumper my d LoadFile test yaml print Dumper d
  • APEX 安装失败,PLS-00201:必须声明标识符“SYS.DBMS_DB_VERSION”

    尝试在 Oracle XE 18c 数据库上安装 Oracle APEX 20 2 如下官方说明 https docs oracle com en database oracle application express 20 1 htmig
  • 如何确保我的代码永远不会直接退出?

    eval require file subsequent code goes here If file包含一个exit语句 后面的代码就没有机会运行 如何解决以便后续代码始终有机会运行eval已经完成了 中止是不可能的exit call f
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • 如何跨多个表强制执行 CHECK 约束

    我有一个在 Microsoft SQL Server 2012 Express 中记录奶牛繁殖信息的数据库 显然 一头牛只有在出生后才能配种 并且在其一生中可能会配种多次 我需要在我的数据库中强制执行这些约束 我目前已经根据下图安排了一个架
  • 在perl中调用基本构造函数

    从 Perl 中的类构造函数调用基本构造函数的正确方法是什么 我见过这样的语法 my class shift my a shift my b shift my self class gt SUPER new a b return self
  • 有没有多核利用NoSQL系统?

    我从昨天开始就开始使用 MongoDB 并且非常喜欢它 我正在尝试导入大量数据 20 亿行 并为其建立索引 但它似乎没有使用我的系统拥有的 8 个核心 并且导入以正常速率 60000 条记录 秒 进行 我只能想象索引这个集合中的两列可能需要
  • WordPress:wpdb->插入与wpdb->准备(wpdb->查询(“INSERT

    我想知道 WordPress 的插入功能是否也向数据添加斜杠 如果没有 准备查询方法似乎可以更好地防止 SQL 注入 我尝试在 codex api 中查找问题 然而 它似乎没有记录 谢谢 这个问题有点老了 自从提出这个问题以来 法典可能已经

随机推荐

  • 数据路径“”不应具有附加属性(dryRun)

    我在 MAC 中安装了最新的 Angular 6 0 4 当我在终端中输入时 ng new happiness display Schematic input does not validate against the Schema dry
  • 如何使用 IntelliJ 从 Selenium/TestNG java 文件创建可执行 jar 文件?

    我已经在谷歌上搜索了好几天 试图找出如何做到这一点 如果有人之前这样做过 我将非常感谢您的帮助 我在 IntelliJ 中创建了一个自动化测试项目 可以自动执行用户与 Web 应用程序的交互 我想将该自动化测试 使用 Selenium 和
  • Apache Toree 和 Spark Scala 无法在 Jupyter 中运行

    我在 Jupyter 上运行 Scala Spark 时遇到问题 以下是我在 jupyter 中加载 Apache Toree Scala 笔记本时出现的错误消息 root ubuntu 2gb sgp1 01 jupyter notebo
  • 整理 Git 混乱

    我刚刚继承了一个使用 Git 维护的项目 代码一度被部署到 3 个独立的系统上 每个系统都维护自己的去中心化 Git 存储库 3个系统中的每一个都在3个不同的方向上扩展了原始的基础系统 这 3 个系统均未相互同步 一些更改发生在主分支上 其
  • 文本到音素转换器

    我正在寻找一种将文本转换为音素的工具 例如文本到语音软件 我可以编写一个程序 但它不会没有错误并且需要很多时间 所以我的问题是 有没有一个简单的工具可以转换例如 你好 到 HH AH0 L OW1 也许有一些命令行工具 以便我可以捕获标准输
  • 亚马逊商城 API [已关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我期望亚马逊市场网络服务像任何其他网络服务一样简单 但事实并非如此 似乎有一些关于市场产品提要的信息 任何人都可以帮助我如何开始上传新产品 一步一步 因为我是新手 以及更新数量或
  • 使用elasticsearch-dsl的delete方法时版本冲突

    因此 我们在 Django 项目中使用elasticsearch 并且使用elasticsearch dsl python 库 我们在生产中遇到以下错误 ConflictError 409 took 7 timed out false to
  • ASP.Net MVC 中的自我 AJAX 更新部分视图/控制器和复制 div

    我对 MVC 的部分看法如下 div div 在该 div 内有一个表单 它使用 AJAX 调用控制器并返回相同的部分视图 问题是调用视图的结果替换了 div 的内容 而不是整个 div 我最终得到 div div div div 根据我一
  • 真(非伪)随机数生成器。外面有什么? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在寻找能够生成真实随机数的经济实惠的解决方案 我已经发现LavaRnd 这是一个密码学上合理的随机数生成器 有人有这个领域的经验和 或了解其他解决方案吗 PS 恕我直言 这个问题
  • API 获取和浏览器崩溃后 Swagger UI 冻结

    我有一个 ASP NET WebAPI 项目 我试图用 Swagger UI 替换旧的 XmlDocumentationProvider 页面 我正在使用webAPI 5 3 1 的 swashbuckle swagger努吉特包 我能够导
  • 如何创建非持久性 EJB 3.1 计时器?

    使用 NetBeans 7 1 GlassFish 3 1 我创建了一个新的 TimerSessionBean Stateless public class NewTimerSessionBean implements NewTimerSe
  • 如何计算孩子的数量?

    我有一个清单 ul li li li li li li ul 我需要 jQuery 来计算列表中的项目数 您可以使用 length 像这样 var count ul li length length告诉选择器找到了多少个匹配项 因此这会计算
  • 更新 mongodb 中的嵌套数组

    我在 mongodb 中有一个文档 其中包含需要更新的 2 级深度嵌套对象数组 如下所示 id 1 items id 2 blocks id 3 txt hello 如果只有一层深数组 我可以使用位置运算符来更新其中的对象 但对于第二层 我
  • Google App Engine 标准环境还是灵活环境?

    我陷入了选择 Google App Engine Standard 和 Google App Engine Standard 之间的抉择 适合现实世界生产的灵活环境 我肯定想使用Java 需要使用Firebase 最新版本 进行身份验证和推
  • 为子字符串搜索建立索引?

    我想在数十亿个字符串中进行常规子字符串搜索 这个要求与一般的全文搜索有点不同 因为我希望查询 ubst 也可以点击 substr Lucene 或 Sphinx 能够做到这一点吗 如果没有 您认为最好的方法是什么 这种情况下的最佳索引结构是
  • iOS 和 Android 共享 HTTP 深度链接?

    我正在尝试通过 URL 通过电子邮件等共享 启动我的本机应用程序 Android 似乎只响应 HTTP 深层链接 URL 例如 http myapp com stuff 并且 iOS 仅响应非 HTTP 自定义深层链接 URL 例如 mya
  • SPA - Firebase 和 .Net WebApi 2 身份验证

    我有一个用 AngularJs 编写的单页应用程序 此时框架无关紧要 该应用程序托管在 IIS 中 它由 index html 和一堆客户端资产组成 在后端 我有 WebApi 2 它也作为单独的应用程序托管在 IIS 中 对于客户端身份验
  • 不安全的 JavaScript 尝试通过 URL 访问框架

    我已将 Vimeo 合并到我正在构建的 WordPress 主题中 但出现以下错误 不安全的 JavaScript 尝试通过 URL 访问框架http themes ibrogram com beta blog 来自带有 URL 的框架ht
  • 停止在 jqgrid 中调整列大小

    如何使 jqgrid 的所有列不可调整大小 目前我认为每一列都必须指定属性 ressized false 我可以为整个网格指定吗 从版本 3 8 2 开始 jqGrid 支持一项非常有用的功能 栏模板 我赞扬该功能可能不太正确 因为该功能是
  • 当浏览器重新加载/返回时,如何防止数据库被再次写入?

    我正在编写一个小型 Web 应用程序 用于写入数据库 Perl CGI 和 MySQL CGI 脚本从表单中获取一些信息并将其写入数据库 然而 我注意到 如果我在网络浏览器上点击 重新加载 或 返回 它会再次将数据写入数据库 我不想要这个