2013-02-15 90 views
-1

我最近问了一个question关于一个只包含单选按钮的表单。一位有经验的用户回答,并且还告诉我,我对SQL注入非常开放。有人可以解释一下吗? - 没有文本用户输入。mysql注入和单选按钮形式

+0

请显示你有什么试过? – 2013-02-15 11:33:05

+0

*任何以超级全球化结束的输入都需要进行消毒。任何。单选按钮也不例外。他们的价值观被发送到您的脚本,他们很容易被篡改。 – Gordon 2013-02-15 11:34:04

+0

经验法则是不要信任任何到达服务器的数据。总是假设数据是有害的,直到您证明不正确为止。永远不要假设到达的值是你期望的值。 – GarethL 2013-02-15 11:45:44

回答

1

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

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

但不仅仅是编辑它们。如果您的网站不安全,则任何人都可以在自己的计算机上创建表单或使用自己的输入创建表单,然后通过POST将其发送到您的网站。

您可以在this site了解更多关于安全和PHP的信息。

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

例如:

$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(); 
2

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

常见的浏览器工具使用户能够修改HTTP请求,所以有人可以很容易地改变你的单选按钮的值为任何东西。

+0

好的,我明白了。谢谢。这东西真的很危险 – MFA 2013-02-15 11:45:14

0

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

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

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

请阅读这篇文章:How can I prevent SQL injection in PHP?

1

一种形式提供一个意味着人们将数据提交到您的HTTP终点,但人们并不需要用它来提交数据。例如,他们可以创建自己的表单,或者手动构建HTTP请求。

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

由于无法控制它将接收的输入,因此终点需要安全,以防止任何输入。