-1

我最近问了一个关于仅包含单选按钮的表单的问题。一位经验丰富的用户回答并告诉我,我对 SQL 注入持开放态度。有人可以解释一下吗?- 没有文本用户输入。

4

4 回答 4

2

用户可以轻松地编辑 HTML 或以其他方式更改提交的内容。仅仅因为它们是单选按钮并不意味着它们不能改变值;他们可以将它们设置为任何东西,包括可能导致注入的值。

通用浏览器工具使用户能够修改 HTTP 请求,因此有人可以轻松地将您的单选按钮值更改为任何值。

于 2013-02-15T11:34:10.003 回答
1

任何用户都可以使用 DOM 浏览器编辑这些字段,例如Firefox 中的Firebug或 Chrome 中包含的浏览器。(检查元素选项)

没有用户输入,但用户仍然可以编辑 DOM 结构和包含。

但不仅仅是编辑它们。如果您的站点对跨站点脚本攻击 (XSS)不安全,任何人都可以在自己的计算机或主机中创建一个表单,并使用自己的输入将其发送到您的站点POST

您可以在此站点中阅读有关安全性和 PHP 的更多信息。

除了过滤输入之外,避免 SQL 注入的最佳方法是使用PDO或准备好的语句对 DB 进行安全调用。

例如:

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);


// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
于 2013-02-15T11:34:08.423 回答
1

表单为人们提供了一种向您的 HTTP 端点提交数据的方法,但人们不需要使用它来提交数据。例如,他们可以创建自己的表单,或者手动构建 HTTP 请求。

您发送给客户的任何内容都无法阻止人们提交他们想要的任何内容。

端点需要对任何输入保持安全,因为您无法控制它将接收什么输入。

于 2013-02-15T11:34:43.277 回答
0

恶意用户不需要您的表单来向您的服务器创建自己的 POST 请求。他们只需要知道您的服务器接受的表单密钥,然后他们就可以在那里创建自己的请求。

如果您允许将未转义的$_POST/$_GET/$_REQUEST/$_COOKIE/(some $_SERVER)值直接插入到您的查询中,那么您将受到影响。

为了安全起见,使用带有 PDO 或 mysqli 的参数化查询。

请阅读这篇文章:如何防止 PHP 中的 SQL 注入?

于 2013-02-15T11:34:33.673 回答