Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带隐藏字段的输入表单如何保护它_Php_Security - Fatal编程技术网

Php 带隐藏字段的输入表单如何保护它

Php 带隐藏字段的输入表单如何保护它,php,security,Php,Security,在我知道如何保护上传图像后,我想再举一个例子,其中一个是隐藏的 SQL表(id、名称、作业、编号) 表单代码(支持成员将编辑自己的信息) 问题 那么如何保护这个简单的表单不受这种输入表单的影响呢~谢谢 这个问题真的很严重,因为它让我的网站免费被黑客攻击:)你无法控制人们向你的服务器提交的数据 您必须在服务器上检查用户是否有权查看信息或进行他们要求的更改 例如: 能够将隐藏表编号的值编辑为任何值,例如value=“1”,从而使成员的更新信息具有该值编号1 这一过程类似于: 是否允许任何人编辑此字段

在我知道如何保护上传图像后,我想再举一个例子,其中一个是隐藏的

SQL表(id、名称、作业、编号)

表单代码(支持成员将编辑自己的信息)

问题 那么如何保护这个简单的表单不受这种输入表单的影响呢~谢谢


这个问题真的很严重,因为它让我的网站免费被黑客攻击:)

你无法控制人们向你的服务器提交的数据

您必须在服务器上检查用户是否有权查看信息或进行他们要求的更改

例如:

能够将隐藏表编号的值编辑为任何值,例如value=“1”,从而使成员的更新信息具有该值编号1

这一过程类似于:

  • 是否允许任何人编辑此字段?如果是的话,那好吧
  • 请求是否来自经过身份验证的用户?如果没有,则返回错误消息和登录表单
  • 请求是否来自id为1的用户?如果是,那好吧
  • 如果请求来自具有管理员权限的用户?如果是,那好吧
  • 返回错误消息

  • 如果您有一个表单和任何用户来编辑这些值,那么就会出现这个问题。更好的方法是对用户进行身份验证。仅允许使用帐户登录的用户对其各自的帐户进行更改


    另外,不要使用mysql\u query或类似mysql\u*的任何东西,它们在php5中是不安全的,并且会贬值。

    如果您的原因中没有用户授权选项,您可以尝试以下技术:

    • 将隐藏字段设置为包含其他信息的数字散列
    • 使用加密的数字设置隐藏字段(可能的salt也会增加此处的安全性)

    当然,在发送表单HTML和验证帖子信息时,它会添加额外的步骤,但至少攻击者在帖子上伪造有效数字要困难得多。但是,如果攻击者知道不同用户的加密/散列号码,则不会拯救您,除非明智地使用隐藏字段中的盐渍信息。

    无法保护隐藏字段。100%不可能阻止恶意用户编辑它

    您所能做的最好的事情就是验证它的数据

    对于示例字段,您最好确保它实际上是一个数字

    但这对任何人都没有帮助

    您需要做的是将旧数据作为隐藏数据发送。所有这些。用旧身份证填写

    然后验证新旧数据。确保它们中没有注入的sql代码。做了这件事,你就会

    $name
    $job
    $id
    $old_name
    $old_job
    
    一切就绪。那你就可以了

    从name=“$old\u name”和job=“$old\u job”的用户中选择*

    如果你重新开始,那么你可以
    updateusers set name=“$name”,job=“$job$”其中id=$id

    现在,即使用户更改ID,它也不会做任何事情,因为select将返回0行,并且编辑尝试将中止


    现在,如果有人碰巧知道其他人输入的所有三个字段,他们仍然可以更改它。唯一的解决方法是强制验证,并让另一个数据库将用户名/密码对绑定到id。

    不要将它们与数字绑定,而是使用唯一的id,如PHP的会话id?您正在使用并且应该使用。
    <form action="send.php" method="post" name="send" id="send">
     <input type="text" name="name" id="name" value="John"/>
     <input type="text" name="job" id="job" value="Plumber"/>
     <input type=hidden name="number" id="number" value="1234"/>
     <input type="Submit" name="Submit" value="Submit"/>
    </form>
    
    if(isset($_POST['send'])){  
    
    $name   = mysql_real_escape_string($_POST[name]);
    $job    = mysql_real_escape_string($_POST[job]);
    $number = mysql_real_escape_string($_POST[number]);
    
    $sql= "update users SET name='$name',job='$job' WHERE number='$number'";
           mysql_query($sql) or die("query failed: $sql".mysql_error());
    
    echo "Update Done";
    
    } else { 
    echo "Nothing to update";
    }
    
    $name
    $job
    $id
    $old_name
    $old_job