Php 下拉选择字段是否易受任何类型的注入攻击

Php 下拉选择字段是否易受任何类型的注入攻击,php,mysql,listbox,code-injection,Php,Mysql,Listbox,Code Injection,我在这里读到了“永远不要相信用户输入”的咒语,这很有道理。我可以理解,用户输入的任何字段都是可疑的。但是,下拉选择字段怎么样?它们可以用于任何类型的注射吗 我已经清理了所有允许用户输入的字段,还使用了mysqli编写的语句插入到数据库中 但是,我的表单中有三个下拉列表,我想知道是否需要对它们做些什么?在用户输入过程中可能会发生注入,它们就是输入字符串的那个 在使用select的情况下,您是定义选项的人,您自己知道这些选项不会成为注射的原因 如果用户可以定义该选项,他们就可以使用select fo

我在这里读到了“永远不要相信用户输入”的咒语,这很有道理。我可以理解,用户输入的任何字段都是可疑的。但是,下拉选择字段怎么样?它们可以用于任何类型的注射吗

我已经清理了所有允许用户输入的字段,还使用了mysqli编写的语句插入到数据库中


但是,我的表单中有三个下拉列表,我想知道是否需要对它们做些什么?

在用户输入过程中可能会发生注入,它们就是输入字符串的那个

在使用select的情况下,您是定义选项的人,您自己知道这些选项不会成为注射的原因

如果用户可以定义该选项,他们就可以使用select for injection攻击


在下拉列表中要做的一件好事是使用与输入相同的代码来防止注入攻击。在获得值时,在每个控件中处理相同的内容。

许多现代浏览器都具有源代码修改功能。是的,任何客户端->服务器信息都可以被注入


但是,如果您对所有$\u POST或$\u GET数据使用绑定变量,则应该没有问题。

恶意用户很容易将数据注入
字段、隐藏字段或其他任何内容。正如格言所说,永远不要相信用户输入。

我建议您清理表单输入中的所有数据。则默认情况下,用户可能无法直接编辑您的字段,但是,如果您不清理传入的数据,精心编制的表单提交伪装成您的表单提交可能会允许脚本和/或数据库中存在一些恶意代码。

在选择列表上使用准备好的语句和清理过程仍然是一个好主意,因为大多数浏览器的开发工具和检查模式允许用户动态修改HTML元素的值、属性和属性。恶意用户可能会通过选择列表项来尝试此技巧。

恶意用户可以更改网站中的每个元素(隐藏字段、div、样式、ajax调用,您可以随意选择…)

也就是说,如果您已经在使用准备好的语句,那么就不必太担心SQL注入,因为mysql已经知道要执行哪些语句

相反,您应该清理网站中呈现的所有输出

比如说,在你的表格中,你问我以这种方式生活在哪个国家:

 <select name="country">
     <option value="Mexico">Mexico</option>
     <option value="USA">USA</option>
     <option value="Canada">Canada</option>
 </select>
 Your country is: <?=$country?>

墨西哥
美国
加拿大
但我是一个恶意用户,我使用Chrome的代码检查器来修改你的HTML,我选择墨西哥,但将其值更改为

警报(“你好世界”)

如果您以这种方式在另一页中输出该值:

 <select name="country">
     <option value="Mexico">Mexico</option>
     <option value="USA">USA</option>
     <option value="Canada">Canada</option>
 </select>
 Your country is: <?=$country?>
您的国家是:
然后你会写:

 Your country is:
 <script type="text/javascript">alert("Hello World")</script>
您的国家是:
警报(“你好,世界”)
然后会弹出一个警告框,文本为“Hello World”

我能造成什么伤害,你可能会想

我可以用它做任何我想做的事,我可以偷cookies,或者如果这个值是公开的(比如说你在frontpage中显示这个值),那么我可以将你的用户重定向到另一个网站,更改你网站的内容。。。我想要什么都行

要清理用户的输出,可以使用

htmlentities


例如,这将把
符号转换为其各自的代码:
>

是的,在浏览器控制台中使用简单的Javascript(几乎所有现代浏览器都有),它们可以将select的值更改为它们想要的任何值。如果需要,他们还可以为输入文本字段添加HTML


Javascript是实现这一点的最简单的方法,有很多其他方法可以控制脚本的$\u POST变量。请记住,$\u POST和$\u GET是用户提供的变量。不要相信他们

注意:除了清理数据以防止注入攻击外,还应验证该值是否有效。如果下拉字段允许用户选择1到5之间的数字,则不允许在数据库中插入8。虽然不是天生的恶意,但它可能会导致问题。简单的回答是肯定的,下拉选择字段是易受攻击的。任何客户端代码都会被恶意用户更改。哇!这是我在寻找注射时遇到的最好的解释。我正在自学所有这些语言,许多解释都不足以真正理解概念/结果!谢谢我真的想指出,即使您使用的是准备好的语句,您仍然需要清理用户输入,但是输出和输入一样重要