php - 下拉选择字段是否容易受到任何类型的注入(inject)

标签 php mysql listbox code-injection

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

我已经清理了所有允许用户输入的字段,并且还使用 mysqli 准备好的语句插入到数据库中。

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

最佳答案

网站中的每个元素都可能被恶意用户更改(隐藏字段、div、样式、ajax 调用,应有尽有...)。

也就是说,如果您已经在使用准备语句,则不必太担心 SQL 注入(inject),因为 mysql 已经知道将要执行哪些语句。

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

假设在您的表格中,您以这种方式询问我住在哪个国家/地区:

 <select name="country">
     <option value="Mexico">Mexico</option>
     <option value="USA">USA</option>
     <option value="Canada">Canada</option>
 </select>

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

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

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

 Your country is: <?=$country?>

然后你会写:

 Your country is:
 <script type="text/javascript">alert("Hello World")</script>

然后会弹出一个带有文本“Hello World”的警告框

你可能想知道我会造成什么伤害......

好吧,我可以用它做任何我想做的事,我可以窃取 cookie,或者如果该值是公开的(比如您在首页显示该值),那么我可以将您的用户重定向到另一个网站,更改您网站的内容...任何我想要的。

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

htmlentities

这将转换,例如,< >其各自代码的符号:&lt;&gt

关于php - 下拉选择字段是否容易受到任何类型的注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18008017/

相关文章:

php - Symfony2 类 Brenne\BaseBundle\Entity\Websites 不是有效的实体或映射的父类(super class)

php - 调用非对象上的成员函数execute()

php - php 的标准生产设置

sql - 使用OR语句驯服MySQL查询性能时出现问题

java - Java如何连接Mysql?

vb.net - 从对象内部的对象列表绑定(bind)列表框

PHP 生成 IP 范围

MySql 根据多个条件提供重复计数

delphi - 具有高级格式选项的列表框组件?

php - 在 PHP 中从列表框(多项选择)值创建数组