所以,正如标题所说的,我很好奇,用户可以通过浏览器更改元素的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();
?>这是否足够,或者实际上没有足够安全的方法来保护数据?
发布于 2014-12-16 04:49:12
您说得对,这将是一个安全漏洞。ID属性确实可以通过浏览器控制台进行更改。
发布于 2014-12-16 04:52:16
是的,他们可以改变它,或者只是让while request是伪造的,而你不会区分它们。这里的经验法则是从不信任来自用户的任何数据。这意味着-总是在服务器端对数据进行验证,清理数据,并且总是假设请求中的数据会欺骗/欺骗/黑客你。
发布于 2014-12-16 04:53:17
是。一旦DOM在他们的浏览器中,用户就可以对它做任何他们喜欢的事情。
他们还可以在那里执行任何他们喜欢的JS。
不过,您在错误的地方担心这个问题。您的控制在the服务器的边缘结束。客户端可以向它发出任何他们喜欢的HTTP请求,并包括他们想要的任何id值。您需要在那里解决安全性问题,而不是在浏览器中。
如果你想保护你的数据库,那么你需要要么不允许HTTP请求导致秘密数据被释放/改变,要么你需要编写服务器端规则来限制哪些HTTP请求可以改变它们。
通常,这涉及到知道请求来自谁(身份验证)和知道谁可以访问哪些ID(授权)。
一种简单的方法是维护一个数据库,该数据库包含一个用户表(包括散列密码)、一个“事物”表和一个所有权表(其中有一列用户ids和一列事物ids)。如果请求中不包含用户名和密码,您可以交叉引用所有权表中的事物id -返回一条错误消息,而不是要求返回的消息。
https://stackoverflow.com/questions/27492816
复制相似问题