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

2023-11-27

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

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


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

EDIT:

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

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

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

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

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

  • 与 6 位随机字母数字代码发生冲突的概率是多少?

    我使用以下 Perl 代码生成随机字母数字字符串 仅限大写字母和数字 用作 MySQL 数据库中记录的唯一标识符 数据库的行数可能会保持在 1 000 000 行以下 但实际的绝对最大值约为 3 000 000 行 我是否有 2 条记录具有
  • 如何使用内容类型:多部分/相关

    我想向用户发送一个二进制文件 并在浏览器上显示一些 HTML 我正在使用 apache2 的 CGI BIN 脚本 我发现此示例位于第 4 页 http www ietf org rfc rfc2387 txt 该链接还显示有关多部分 相关
  • Perl:非阻塞管道 - 只收到一条消息

    几周前我问了一个关于实现非阻塞单父多子管道的问题 mob 巧妙地回答了这个问题here https stackoverflow com questions 52723489 perl one parent many children sin
  • DB2 Express 的默认用户名和密码

    我已在本地 Windows 计算机上安装了 Db2 Express 谁能告诉我默认的管理员凭据是什么 我尝试过以下组合 什么都不起作用 用户名 db2admin 密码 db2admin 用户名 db2admin 密码 密码123 应该是您本
  • mysql 中 INSERT 语句的计算列

    假设我想要一个表来记录其他表中的日期和列数 或者任何类型的数学 字符串连接等 CREATE TABLE log id INTEGER NOT NULL AUTO INCREMENT date DATETIME NOT NULL count
  • 如何查找所有mysql表之间的所有关系?

    如何找到MySQL所有表之间的所有关系 例如 如果我想知道大约有 100 个表的数据库中表的关系 有什么办法知道这个吗 从编程角度来说 更好的方法是从以下位置收集数据 INFORMATION SCHEMA KEY COLUMN USAGE表
  • 无法从 Web 主机本身以外的任何地方连接到任何 Web 主机的 MySQL 数据库

    我有 2 个不同的虚拟主机 pagodabox 000webhost 都是免费的 并且我已经设置了localhost与MySQL 我已经在他们三个上安装了 wordpress 它们在自己的域中工作得很好 即 什么时候localhostwor
  • 打印 Perl 数组的简单方法? (有一点格式化)

    有没有一个easy如何打印每个元素之间用逗号分隔的 Perl 数组 编写一个 for 循环来做到这一点非常简单 但不太优雅 如果这是有道理的 只需使用join http perldoc perl org functions join htm
  • 关于 Cassandra 与 MySQL 的一些建议

    几天前我在这里问了一个问题 得到了一些非常好的答案 我正在考虑做一个带有个人资料 个人简介等的facebook风格的网站 并询问我是否应该使用mysql 答案是使用Cassandra 因为好多了 我只是问这是每个人都会建议的 只是我对mys
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 在数据库中存储类型时的最大 MIMEType 长度

    人们在数据库中使用什么作为 MIMEType 字段的长度 到目前为止我们看到的最长的是 72 字节 application vnd openxmlformats officedocument wordprocessingml documen
  • 使用perl创建层次结构文件

    我的任务是使用 perl 创建父子层次结构文件 示例输入文件 制表符分隔 记录将以随机顺序排列在文件中 父项 可能出现在 子项 之后 S5 S3 S5 S8 ROOT S1 S1 S7 S2 S5 S3 S4 S1 S2 S4 77 S2
  • Capistrano 部署擦除数据库?

    我已成功使用 Capistrano 将我的应用程序部署到生产环境 但我不明白如何处理我的数据库 我正在使用颠覆和乘客 当我运行 cap 部署时 新部署会重新启动一切 它会清除添加到数据库中的数据 显然 必须有一个解决方案 但我很惊讶没有在网
  • Perl 拆分和正则表达式

    我有以下字符串 100 California Grown Olives Water Salt And Ferrous Gluconate An Iron Derivative asasd sadasda 我想把它分开 but only if
  • 如何匹配单引号字符串中的双反斜杠?

    我需要区分带有单反斜杠和双反斜杠的字符串 Perl 对它们一视同仁 print n qqq www eee rrr print n qqq www eee rrr 将给出相同的结果 qqq www eee rrr qqq www eee r
  • 从数据库而不是配置文件中读取 CodeIgniter 配置值

    您可能知道 当您使用 CI 创建新项目时 您必须手动输入基本网址 加密密钥在config config php中 我正在努力克服这个问题 因此正在寻找一种方法read那些价值观而是从数据库中 为客户进行安装并设置时间作为一个整体decrea
  • 使用 PHP 代码和 HTML 表单将 Excel (.csv) 导入 MySQL

    我知道还有其他类似的帖子 但每个人都建议直接在 PHPMyAdmin 中将其导入 MySQL 这工作完美 但我需要通过 HTML 表单导入 PHP 到 MySQL 我想要一个收集文件的 HTML 表单 然后将该文件传递给 PHP 脚本 我想
  • 需要有关使用 PHP 在 mysql 数据库中插入逗号分隔数据的帮助

    数据库表中已有的演示数据 INSERT INTO csvtbl ID SKU Product Name Model Make Year From Year To VALUES 1 C2AZ 3B584 AR Power Steering P
  • Perl 三元条件运算符内部赋值问题

    我的程序中的这段 Perl 代码给出了错误的结果 condition a 2 a 3 print a 无论价值如何 condition就是 输出总是3 为什么呢 Perl 中对此进行了解释文档 http perldoc perl org p
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7

随机推荐

  • 数据路径“”不应具有附加属性(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 脚本从表单中获取一些信息并将其写入数据库 然而 我注意到 如果我在网络浏览器上点击 重新加载 或 返回 它会再次将数据写入数据库 我不想要这个