php - 一张表单上有多个表单 "page"- 多次提交 "block"

标签 php mysql

我在一页上有多个表单(~30),其中一些带有文件上传。

每个表单都有自己的提交按钮。

结构是 bootstrap-tab 和 -collapsebox-design - 因此您可以更改选项卡而无需重新加载并访问“控制面板”中的每个表单。

我尝试对所有表单意外地运行“mysql Inject me”(firefox插件),结果:

服务器响应错误 500。

没有改变任何东西,等了 5 分钟,一切又恢复正常了。

我的问题是:如何防止快速自动/用户提交这些表单(服务器端)?无论如何这可能吗?因此每个用户每约 1 秒只能提交一个。

最佳答案

  1. 向用户提供 session
  2. 在名为 last-submit 的 session 中定义一个变量,并将当前时间作为值。
  3. 当表单结果出现时:
    1. 检查最后提交值是多少。
    2. 如果超过x秒前,则将时间保存为最后提交并分别响应。
    3. 如果少于x秒,则拒绝该表单并分别回复。

如果您想阻止机器人或脚本,请执行以下操作:

  1. 向表单添加一个输入字段,将其命名为 _robo_trap_ 并将样式设置为 display: none 使其对人眼不可见。
  2. 当表单进来时,检查 robo_trap 是否有任何值或其默认值是否已更改。如果是,则丢弃该表格,因为人类看不到也不需要填写该表格。

例如:

<?php

/* User Session */
session_start();

/* Current Time */
$now = new DateTime();

/* First Time ... */
if ( empty($_SESSION['last-submit']) ) {
    $_SESSION['last-submit'] = $now;
}

/* On Form Submit ... */
if ( !empty($_POST) ) {

    /* How fast?! */
    $gap = now->diff( $_SESSION['last-submit'] );
    $gap = $gap->format('%s');

    if ( $gap > 1 ) {

        // good ...

        $_SESSION['last-submit'] = $now;

    } else {

        // bad ...
    }
}

附注只是一个示例代码,给您一些想法,我没有测试它。

关于php - 一张表单上有多个表单 "page"- 多次提交 "block",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19837001/

相关文章:

php - Laravel 验证中的 For 循环

php - woocommerce 产品类别短代码分页不起作用

mysql - 如何在 MySQL 中删除唯一性?

php - 防止在 PHP 中的高级 MySQL 存储过程语句中注入(inject)

sleep 和循环期间的 PHP 内存使用情况

javascript - WebSocket握手时出错: Incorrect 'Sec-WebSocket-Accept' header value with PHP

mysql - 使用外键 - 无法插入

PHP 未定义偏移量

php - 通过在 laravel 中无法正常工作来加入和分组

PHP - 在字符串中搜索关键字并提高提取关键字的质量和准确性