我正在尝试验证注释框的输入,以便只接受文本,并在用户输入数字(1-0)或符号(@ #$%^&*+_= )时提醒消息。防止SQL注入
在html中有什么方法可以做到这一点吗?
发布于 2016-04-01 03:00:59
你永远不能信任来自客户端的东西。你可以相信。您必须始终进行服务器端检查,以阻止SQL注入等内容。
当然,您可以添加您提到的客户端验证,但这只是为了帮助用户不输入垃圾数据。一旦它被发送到服务器仍然不能信任它。
发布于 2016-04-01 05:26:19
使用Javascript/HTML提高安全性的探讨
在
中有一种方法可以做到这一点。
不是的。正如其他人所指出的,您不能通过在HTML或Javascript中执行任何操作来提高安全性。
原因是浏览器和服务器之间的通信对攻击者来说是完全透明的。任何开发人员都可能熟悉Firefox、Chrome等中的“开发人员工具”。即使是这些工具,就在大多数现代浏览器中,也足以创建任意的HTML请求(甚至通过HTTPS)。
因此,您的服务器决不能依赖于请求的任何部分的有效性。不是URL,不是GET/POST参数,不是cookies等;您总是必须自己验证它,服务器端。
关于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注入变得不可能。
当然,在客户端检查参数以改善用户体验(避免服务器往返的延迟)仍然是明智的;也可以在服务器端检查参数(以避免隐秘的错误消息)。但这些检查不应与安全混淆。
发布于 2016-04-01 06:08:03
简短的回答是:不,您不能在HTML中这样做。甚至只有一个复选框和提交按钮的表单也可能被滥用。
更长的答案...
虽然我强烈反对在超文本标记语言和JavaScript中无法增强安全性的说法,但对此的全面讨论远远超出了本文的讨论范围。
但最终,您不能假设来自您无法控制的计算机系统的任何数据都是安全的(实际上,在许多应用程序中,您不应该假设来自您控制的计算机的数据是安全的)。
对于任何攻击,您的主要防御措施是在系统的组件之间传递数据之前,将数据转换为发送和接收组件的已知安全格式。这里,我们专门讨论如何将数据从服务器端应用程序逻辑传递到数据库。HTML和JavaScript都不参与这次交换。
走向客户,你需要做出一个选择。您可以验证和接受/拒绝内容,以便根据数据中的模式进行进一步处理,也可以处理所有数据,并将您的信任放在正确处理内容的较低层。通常,人们采用第一种选择,但这会产生新的安全问题;制定防御措施并找到任何漏洞变得很容易。在理想世界中,这不会太重要-更深层次的防御将处理问题,然而在现实世界中,开发人员受到时间和能力的限制。如果归结到你将技能/时间预算花在哪里的选择,那么答案应该总是让输出比验证输入更安全。
https://stackoverflow.com/questions/36341480
复制相似问题