我注意到网站上进行sql注入和代码注入的主要原因是“ input type = text”,返回Apostrophe作为要执行的命令而不是字符。
我还注意到,像Java和php这样的编程语言都可以解决实际问题,而不仅仅是在HTML中修复Apostrophe。我知道如何通过编程语言来防止这种情况。
mysql_real_escape_string("sql query here");
我在网上进行了调查,但找不到任何可以回答我问题的信息。为什么有替代方法而不是解决撇号本身的原因?我的意思是,当HTML读取并返回一个值时,为什么它不能仅返回\'或\“而不是仅仅返回'或”
答案 0 :(得分:4)
'
具有特殊含义,如果您尝试将其插入到SQL查询中。
'
没有特殊含义,如果您尝试将其插入HTML元素(并且如果您提交了don't
并且期望结果为{{1 }},那么您就不想找回<span>don't</span>
!)
浏览器无法知道将数据发送到服务器后将如何处理。它只是使用<span>don\'t</span>
属性告知使用的标准编码发送给定的数据。
只有针对被注入到特定环境的数据适当地处理数据,才能可靠地完成对XSS,SQL注入和其他类型攻击的保护。
答案 1 :(得分:1)
我想解释这个问题的最简单方法是让您想象一个带有房屋防盗系统的房屋之类的网页,其中门窗是html,而带有所有传感器的防盗系统是像java这样的语言,.NET / C#,php等。
如果门被制造成在认为锁被撬开的任何时候都能发出警报,并且窗户可以告诉自己玻璃何时被砸碎,那真是太酷了。
但是,如果您有个防盗在墙壁上切一个洞并进入房屋而又不碰门或窗,该怎么办?到那时,他们已经绕过了您的门窗安全(HTML),剩下保护您房屋的就是安全系统中的运动/红外传感器(php / java / c#)。
这是我们会遇到的问题。如果HTML具有防止sql注入的附加功能,并且在服务器端未执行任何操作(即:房屋中没有运动/入侵传感器),则剩下的内容可以防止用户绕过HTML页面并将恶意内容直接发送到服务器?