SQL注入,注释的方式


SQL Injection, The way of commenting

我正在研究注入及其背后的技巧,所以我想出了用#注释MySQL查询的方法。

正如我们所知道的在HTML中使用命名锚一样,在向URL注入的情况下,#的工作方式与HTML命名锚类似,对运行查询并不有害。

问题是为什么会发生这种情况,为什么PHP不直接将#作为其余的输入(例如?id=2547#)

哈希由浏览器本地处理,而不是发送到服务器。例如,如果您编写URL

http://yourdomain.com/script.php?param=foo#id=1234#

浏览器仅向服务器发送CCD_ 4。当响应返回时,它在HTML中搜索id=1234锚并向下滚动到它

如果您想将注释发送到服务器,则需要对其进行百分比编码:

http://yourdomain.com/script.php?param=foo%23id=1234%23

由于浏览器认为它是一个特殊字符,并且不是url编码的,因此当浏览器遇到#时,它会假设上一个GET参数(如果存在)已经结束。

如果它是url编码的,并且输入没有经过适当的消毒,那么它实际上确实会造成注入威胁,否则,如果用户输入经过适当的净化,我就不会担心这一点。

编辑:

如果数据库允许这样的输入(例如varchar2),并且html特殊字符在输入过程中得到了正确的转义,那么数据库当然会保存用户输入,因为它们实际上只是符号,没有任何特殊意义。