用户可以更改元素的ID吗?

时间:2014-12-15 20:45:53

标签: html security

因为标题说我很好奇,用户可以通过浏览器更改元素的ID吗?我有一个输入列表 - 复选框,当你点击其中一个时,ajax获取该元素的ID并使用它从数据库中获取数据,所以基本上我正在考虑的是,如果它以某种方式可以更改ID我的数据库不受保护的元素。如果可能的话,我该如何保护呢?

好的,所以我觉得它不会安全,如果我这样使用:

<?php

$mysqli = new mysqli("host", "user", "password", "database");

$usuario = $mysqli->real_escape_string($_POST["usuario"]);
$clave = $mysqli->real_escape_string($_POST["clave"]);

$sql='  SELECT * FROM usuarios 
        WHERE username="'.$usuario.'" 
        AND pass="'.$clave.'"
     ';

$mysqli->query($sql);

$mysqli->close();
?>

它是否足够,或者实际上没有足够安全的方法来保护数据?

3 个答案:

答案 0 :(得分:2)

你是对的,这将是一个安全漏洞。确实可以通过浏览器控制台更改ID属性。

答案 1 :(得分:1)

是的,他们可以更改它,或者只是在请求伪造时制作,你不会说出差异。这里的经验法则是始终信任来自用户的任何数据。这意味着 - 始终验证,清理服务器端的数据,并始终假设请求中的数据是愚弄/欺骗/黑客攻击。

答案 2 :(得分:1)

是。一旦用户在浏览器中,用户就可以对DOM做任何他们喜欢的事情。

他们也可以执行他们喜欢的任何JS。

你担心这个问题在错误的地方。您的控件在Web服务器的边缘结束。客户端可以根据需要发出任何HTTP请求,并包含他们想要的任何id值。您需要在那里解决安全问题,而不是在浏览器中。

如果要保护数据库,则需要不允许HTTP请求导致发布/更改的秘密数据,或者您需要编写服务器端规则来限制哪些HTTP请求可以更改它们。

通常,这将涉及了解请求来自何种(身份验证)以及了解谁可以访问哪些ID(授权)。

一种简单的方法是保留一个包含用户表(包括散列密码)的数据库,一个“东西”表和一个所有权表(其中包含一列用户ID和一列事物ID)。如果请求不包含用户名和密码,您可以跨所有权表中的事物ID交叉引用 - 返回错误消息而不是要求的内容。