下拉选择字段是否容易受到任何类型的注入

vin*_*aya 2 php mysql listbox code-injection

我在这里读过"永不信任用户输入"的口头禅,这是有道理的.我可以理解,用户键入的任何字段都是可疑的.但是,下拉选择字段呢?它们可以用于任何类型的注射吗?

我已经清理了允许用户输入的所有字段,并且还使用了mysqli预处理语句来插入数据库.

但是,我的表格中有三个下拉菜单,并且想知道我是否需要对它们做任何事情?

ILi*_*cos 8

网站中的每个元素都可以被恶意用户更改(隐藏字段,div,样式,ajax调用,您将其命名为......).

也就是说,如果你已经在使用Prepared Statements,那么你不应该过多担心SQL注入,因为mysql已经知道将要执行哪些语句.

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

让我们说,在你的形式中,你问的是我以这种方式生活的国家:

 <select name="country">
     <option value="Mexico">Mexico</option>
     <option value="USA">USA</option>
     <option value="Canada">Canada</option>
 </select>
Run Code Online (Sandbox Code Playgroud)

但我是恶意用户,我使用Chrome的代码检查器来改变您的HTML,我选择墨西哥,但将其值更改为

<script type="text/javascript">alert("Hello World");</script>

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

 Your country is: <?=$country?>
Run Code Online (Sandbox Code Playgroud)

然后你会写:

 Your country is:
 <script type="text/javascript">alert("Hello World")</script>
Run Code Online (Sandbox Code Playgroud)

并弹出一个警告框,文字为"Hello World"

我可能会对你有什么害处...

好吧,我可以做任何我想要的东西,我可以偷饼干,或者如果这个价值是公开的(比如你在首页显示这个价值),那么我可以将你的用户重定向到另一个网站,改变你网站的内容..无论我想要什么.

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

htmlentities

例如,这会将< >符号转换为相应的代码:&lt;&gt