首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅使用html防止SQL注入

问仅使用html防止SQL注入
EN

Stack Overflow用户
提问于 2016-04-01 02:57:37
回答 4查看 2.2K关注 0票数 0

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

在html中有什么方法可以做到这一点吗?

EN

回答 4

Stack Overflow用户

发布于 2016-04-01 03:00:59

你永远不能信任来自客户端的东西。你可以相信。您必须始终进行服务器端检查,以阻止SQL注入等内容。

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

票数 3
EN

Stack Overflow用户

发布于 2016-04-01 05:26:19

使用Javascript/HTML提高安全性的探讨

在

中有一种方法可以做到这一点。

不是的。正如其他人所指出的,您不能通过在HTML或Javascript中执行任何操作来提高安全性。

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

因此,您的服务器决不能依赖于请求的任何部分的有效性。不是URL,不是GET/POST参数,不是cookies等;您总是必须自己验证它,服务器端。

关于SQL注入

避免SQL注入的最好方法是确保永远不要有这样的代码:

代码语言:javascript
复制
 sql = "select xyz from abc where aaa='" + search_argument + "'"  # UNSAFE
 result = db.execute_statement(sql) 

也就是说,您永远不希望仅仅将字符串连接在一起以形成SQL语句。

相反,您想要做的是使用绑定变量,类似于下面的伪代码:

代码语言:javascript
复制
 request = db.prepare_statement("select xyz from abc where aaa=?")
 result = request.execute_statement_with_bind(sql, search_argument)

这样,用户输入永远不会被解析为SQL本身,从而使SQL注入变得不可能。

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

票数 1
EN

Stack Overflow用户

发布于 2016-04-01 06:08:03

简短的回答是:不,您不能在HTML中这样做。甚至只有一个复选框和提交按钮的表单也可能被滥用。

更长的答案...

虽然我强烈反对在超文本标记语言和JavaScript中无法增强安全性的说法,但对此的全面讨论远远超出了本文的讨论范围。

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

对于任何攻击,您的主要防御措施是在系统的组件之间传递数据之前,将数据转换为发送和接收组件的已知安全格式。这里,我们专门讨论如何将数据从服务器端应用程序逻辑传递到数据库。HTML和JavaScript都不参与这次交换。

走向客户,你需要做出一个选择。您可以验证和接受/拒绝内容,以便根据数据中的模式进行进一步处理,也可以处理所有数据,并将您的信任放在正确处理内容的较低层。通常,人们采用第一种选择,但这会产生新的安全问题;制定防御措施并找到任何漏洞变得很容易。在理想世界中,这不会太重要-更深层次的防御将处理问题,然而在现实世界中,开发人员受到时间和能力的限制。如果归结到你将技能/时间预算花在哪里的选择,那么答案应该总是让输出比验证输入更安全。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36341480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档