字符串的转义顺序在某种程度上重要吗?(HTML和SQL注入)

咖啡开发者

我们正在学校里开发一个小型网站,因此向我们介绍了PHP中的SQL注入及其预防方法。

但是,我看到大多数在线示例和教科书都在执行以下操作

$str = $_POST['user_input'];

$str = $mysqli->real_escape_string($str);
$str = htmlentities($str);

但是,我认为验证用户输入的最合乎逻辑的方法是:

$str = htmlentities($str);
$str = $mysqli->real_escape_string($str);

那有什么区别吗

  • 网站可访问性(向最终用户显示的字符,一旦从数据库中检索出来,该字符串将被“回显”)
  • 防止HTML和SQL注入(顺序错误是否允许注入?)
  • 服务器的性能(例如,一个函数最昂贵,而另一个函数则增加了字符串长度,或者仅仅是因为最终的字符串长度不同,并且我们想在数据库中保存字节)

涵盖更多转义功能也很好(也许应该避免一些危险的组合/顺序)。

我认为正确的方法是搜索转义函数,该函数输出“危险字符”(危险字符为HTML或SQL,如果存在的话,则为危险字符),然后仅提供生成这些危险字符的输入。

米奇·斯奇韦尔(Mitch Satchwell)

该顺序将导致不同的输出。

如下代码:

$string = 'Example " string';
echo htmlentities($mysqli->real_escape_string(($string))
    . "\n"
    . $mysqli->real_escape_string((htmlentities($string));

结果是:

Example \" string
Example " string

输出是不同的,因为如果在转换为HTML实体之前对字符串进行转义,则其引号需要转义,而如果以相反的顺序进行引用,则引号将替换为HTML实体,并且是MySQL的有效字符串值。

也就是说,这两个功能具有完全不同的目的。

htmlentities 用于将字符串转换为其HTML实体,以准备输出到Web浏览器。

real_escape_string 用于在MySQL查询中的引号之间转换字符串以供使用。

两者不能同时使用,您应该将文本存储在数据库中(在传递给数据库之前需要转义),并在显示文本时转换为HTML实体。

如果您坚持要在数据库中存储字符串的HTML实体版本,则正确的方法是先使用htmlentities,然后转义。字符串转义应该是传递给数据库之前对字符串的最后操作。

以错误的方式进行操作可能会导致如上所示的反斜杠,尽管当传递给MySQL时,它们实际上将被忽略,因为\&这不是有效的转义序列。您只有在输出传递到数据库的变量时才会注意到差异(这与以后从数据库检索变量然后输出)不同。

您可能还希望查看以下内容中的准备好的语句mysqli

http://www.php.net/manual/zh/mysqli.prepare.php

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在某种程度上平移地图javascript API

来自分类Dev

从某种意义上说,软链接和硬链接在某种程度上与可变和不可变的对象(在Java中)相关吗?

来自分类Dev

NSMutableDictionary输入数组的输出在某种程度上丢失了信息

来自分类Dev

Laravel 4:模型关系不起作用(某种程度上)?

来自分类Dev

SFTP传输/放置(Jsch)后Zip文件损坏(某种程度上)

来自分类Dev

递归似乎仅在某种程度上起作用-如何调试此类问题?

来自分类Dev

find + xargs + ctags某种程度上丢失了整个子目录的标签

来自分类Dev

监视通过Gmail API删除(并在某种程度上创建)的邮件

来自分类Dev

算术扩展在某种程度上与IFS有关吗?

来自分类Dev

iOS-如何在某种程度上旋转图像

来自分类Dev

CSS转换和动画冲突;html元素的顺序重要吗?

来自分类Dev

向下拖动表格之前,在UITableView中显示滚动条。在某种程度上,UIScrollBar应该始终可见

来自分类Dev

从文本文件中读取(某种程度上)非结构化数据以创建Python字典

来自分类Dev

转义和字符串?

来自分类Dev

订阅和观察的顺序重要吗?

来自分类Dev

$和$中的条件顺序重要吗?

来自分类Dev

SQL-OR条件的顺序重要吗?

来自分类Dev

SQL更新执行顺序重要吗?

来自分类Dev

SQL CASE:WHEN语句的顺序重要吗?

来自分类Dev

SQL:GROUP BY条件的顺序重要吗?

来自分类Dev

SQL:GROUP BY条件的顺序重要吗?

来自分类Dev

使用PHP和HTML转义字符串

来自分类Dev

按包含的字符和字符串的SQL顺序

来自分类Dev

命令顺序重要吗?

来自分类Dev

C#字符串和SQL注入

来自分类Dev

在Lucene文档中添加多值字符串字段,逗号重要吗?

来自分类Dev

如何为HTML转义字符串?

来自分类Dev

类和接口之间的继承顺序重要吗?

来自分类Dev

进行==和===比较时变量的顺序重要吗?

Related 相关文章

  1. 1

    在某种程度上平移地图javascript API

  2. 2

    从某种意义上说,软链接和硬链接在某种程度上与可变和不可变的对象(在Java中)相关吗?

  3. 3

    NSMutableDictionary输入数组的输出在某种程度上丢失了信息

  4. 4

    Laravel 4:模型关系不起作用(某种程度上)?

  5. 5

    SFTP传输/放置(Jsch)后Zip文件损坏(某种程度上)

  6. 6

    递归似乎仅在某种程度上起作用-如何调试此类问题?

  7. 7

    find + xargs + ctags某种程度上丢失了整个子目录的标签

  8. 8

    监视通过Gmail API删除(并在某种程度上创建)的邮件

  9. 9

    算术扩展在某种程度上与IFS有关吗?

  10. 10

    iOS-如何在某种程度上旋转图像

  11. 11

    CSS转换和动画冲突;html元素的顺序重要吗?

  12. 12

    向下拖动表格之前,在UITableView中显示滚动条。在某种程度上,UIScrollBar应该始终可见

  13. 13

    从文本文件中读取(某种程度上)非结构化数据以创建Python字典

  14. 14

    转义和字符串?

  15. 15

    订阅和观察的顺序重要吗?

  16. 16

    $和$中的条件顺序重要吗?

  17. 17

    SQL-OR条件的顺序重要吗?

  18. 18

    SQL更新执行顺序重要吗?

  19. 19

    SQL CASE:WHEN语句的顺序重要吗?

  20. 20

    SQL:GROUP BY条件的顺序重要吗?

  21. 21

    SQL:GROUP BY条件的顺序重要吗?

  22. 22

    使用PHP和HTML转义字符串

  23. 23

    按包含的字符和字符串的SQL顺序

  24. 24

    命令顺序重要吗?

  25. 25

    C#字符串和SQL注入

  26. 26

    在Lucene文档中添加多值字符串字段,逗号重要吗?

  27. 27

    如何为HTML转义字符串?

  28. 28

    类和接口之间的继承顺序重要吗?

  29. 29

    进行==和===比较时变量的顺序重要吗?

热门标签

归档