我正在使用注射和技巧,因此我遇到了#
评论MySQL查询的方式。
正如我们所知道的在HTML中使用命名锚一样,在这种注入URL的情况下,#
的工作方式类似于HTML命名锚,并不意味着对运行查询有害。
问题是为什么会发生这种情况以及为什么PHP不直接包含#
作为输入的其余部分? (例如?id = 2547#)
答案 0 :(得分:1)
哈希值由浏览器在本地处理,而不是发送到服务器。例如。如果你写一个URL
http://yourdomain.com/script.php?param=foo#id=1234#
浏览器只是将GET /script.php?param=foo
发送到服务器。当响应返回时,它会在HTML中搜索id=1234
锚点并向下滚动到它。
如果要将评论发送到服务器,则需要进行百分比编码:
http://yourdomain.com/script.php?param=foo%23id=1234%23
答案 1 :(得分:0)
由于浏览器认为它是一个特殊字符并且不是url编码,当浏览器遇到#
时,它会假定前一个GET参数(如果存在)已经结束。
如果它是url编码并且输入没有正确消毒,那么它实际上会造成注入威胁,否则如果用户输入被正确消毒,我不会担心这个。
修改强>
如果数据库允许这样的输入(例如varchar2)并且html-special-chars在输入期间被正确转义,那么数据库当然会保存用户输入,因为它们实际上只是符号而不会有任何符号。特殊意义。