仅使用html防止SQL注入

时间:2016-03-31 18:57:37

标签: html sql-injection

尝试验证评论框的输入以便仅接受文本,并在用户输入数字(1-0)或符号(@#$%^& * + _ =)时提醒消息。防止SQL注入

是否有办法在html中执行此操作

4 个答案:

答案 0 :(得分:2)

您可以从不信任来自客户端的内容。您必须始终检查服务器端以阻止诸如SQL注入之类的内容。

您当然可以添加您提到的客户端验证,但它只是为了帮助用户不输入垃圾数据。一旦发送到服务器,仍然无法信任它。

答案 1 :(得分:0)

使用Javascript / HTML提高安全性

  

是否有办法在html中执行此操作

没有。正如其他人所指出的那样,您无法通过在HTML或Javascript中执行任何操作来提高安全性。

原因是您的浏览器与服务器之间的通信对攻击者完全透明。任何开发人员都可能熟悉Firefox,Chrome等中的“开发人员工具”。即使是那些在大多数现代浏览器中都存在的工具,也足以创建任意HTML请求(甚至通过HTTPS)。

因此,您的服务器绝不能依赖请求任何部分的有效性。不是URL,不是GET / POST参数,不是cookie等;你总是需要自己验证,服务器端。

在SQL注入

最好避免使用SQL注入,确保永远不会有这样的代码:

 sql = "select xyz from abc where aaa='" + search_argument + "'"  # UNSAFE
 result = db.execute_statement(sql) 

也就是说,您永远不想将字符串连接在一起以获得SQL语句。

相反,你想要做的是使用绑定变量,类似于这个伪代码:

 request = db.prepare_statement("select xyz from abc where aaa=?")
 result = request.execute_statement_with_bind(sql, search_argument)

这样,用户输入永远不会被解析为SQL本身,从而无法进行SQL注入。

当然,检查客户端的参数以改善用户体验(避免服务器往返的延迟)仍然是明智的;也许还在服务器端(以避免神秘的错误消息)。但是这些检查不应与安全性混淆。

答案 2 :(得分:0)

简短回答:不,你不能用HTML做到这一点。即使是带有单个复选框和提交按钮的表单也可能被滥用。

更长的答案......

虽然我强烈不同意您在HTML和JavaScript中无法做任何事情以增强安全性,但对此的全面讨论超出了帖子的范围。

但最终你不能假设来自你不能控制的计算机系统的任何数据都是安全的(实际上,在许多应用程序中你不应该假设你控制的机器的数据是安全的)。 / p>

对任何攻击的主要防御措施是在将数据传输到系统组件之前,将数据转换为已知的发送和接收组件安全格式。在这里,我们特别谈到将数据从服务器端应用程序逻辑传递到数据库。此交换中既不包含HTML也不包含JavaScript。

走向客户,您可以选择。您可以根据数据中的模式验证和接受/拒绝内容以进行进一步处理,或者您可以处理所有数据并将您的信任放在正确处理内容的较低层中。通常,人们采取第一种选择,但这会带来新的安全问题;很容易找出防御并发现任何差距。在一个无关紧要的理想世界中 - 更深层次的防御将解决问题,但在现实世界中,开发人员受时间和能力的限制。如果选择您花费技能/时间预算的地方,那么答案应该始终是使输出更安全,而不是验证输入。

答案 3 :(得分:-1)

问题似乎更直接,但我的回答与以前一样:

永远不要在客户端验证信息。没有意义,因为您需要在服务器上使用相同(甚至更好)的方法验证相同的信息!在Clientside上进行验证只会产生不必要的开销,因为来自客户端的信息不可信任。这是浪费精力。

如果用户发送许多不同的符号但没有真实消息时遇到问题,您应该立即关闭服务器!因为这可能意味着您的用户试图找到入侵服务器的方法获得控制权!

如果服务器没有正确地逃避用户输入,一些奇怪的特殊字符组合可以允许这样做!

简而言之: HTML用于内容显示,CSS用于设计内容,Javascript用于交互,其他语言如Perl,PHP或Python用于处理,传递和验证信息。这些最后调用的语言通常在服务器上运行。即使你在服务器上使用它们,你也需要非常小心,因为有可能使它们变得无用。 (例如,如果您以错误的方式使用全局变量,或者您没有正确地转义用户输入。)

我希望这有助于找到正确的方向。