网站和应用程序通常需要用户输入才能实现其全部目的。如果网站允许用户订阅,则用户需要能够提供他们的电子邮件地址。而在线购物显然需要输入付款明细。 然而,用户输入的问题在于,它还允许黑客输入恶意内容,试图诱使网站或应用程序出现异常行为。为了防止这种情况,任何提供用户输入的系统都需要进行输入验证。 那么什么是输入验证,它是如何工作的呢?
什么是输入验证?
输入验证是分析输入并禁止那些被认为不合适的输入的过程。输入验证背后的想法是,通过只允许满足特定标准的输入,攻击者就不可能输入旨在对系统造成损害的输入。 输入验证应该用于任何允许用户输入的网站或应用程序。即使网站或应用程序不存储任何机密信息,允许无效输入也会导致用户体验问题。
为什么输入验证很重要?
输入验证很重要有两个原因,即用户体验和安全性。 用户体验 用户经常输入无效输入,不是因为他们试图攻击网站或应用程序,而是因为他们犯了错误。用户可能会拼写错误的单词,或提供错误的信息,例如在错误的框中输入用户名或尝试使用过时的密码。发生这种情况时,可以使用输入验证来通知用户他们的错误,让他们能够快速纠正错误。 输入验证还可以防止注册和销售丢失的情况,因为用户没有得到通知,因此认为已经提供了正确的输入,但实际上并没有。 安全 输入验证可防止可针对网站或应用程序执行的各种攻击。这些网络攻击可能导致个人信息被盗,允许未经授权访问其他组件,和/或阻止网站/应用程序运行。 输入验证的遗漏也很容易检测到。攻击者可以使用自动化程序在网站上批量输入无效输入并确定网站的反应方式。然后,他们可以对任何未受保护的网站发起手动攻击。 这意味着缺乏输入验证不仅是一个重要的漏洞;这是一个经常被发现的漏洞,因此经常会导致黑客攻击。
什么是输入验证攻击?
输入验证攻击是任何涉及将恶意输入添加到用户输入字段的攻击。有许多不同类型的输入验证攻击试图做不同的事情。 缓冲区溢出 当向系统添加过多信息时,会发生缓冲区溢出。如果不使用输入验证,就没有什么可以阻止攻击者添加他们想要的信息。这称为缓冲区溢出攻击。它可能导致系统停止运行和/或删除当前存储的信息。 SQL 注入 SQL 注入是将 SQL 查询添加到输入字段的过程。它可能采取将 SQL 查询添加到 Web 表单或将 SQL 查询附加到 URL 的形式。目标是欺骗系统执行查询。SQL 注入可用于访问安全数据以及修改或删除数据。这意味着输入验证对于存储重要信息的任何网站或应用程序尤为重要。 跨站脚本 跨站点脚本涉及向用户输入字段添加代码。它通常通过在属于信誉良好的网站的 URL 末尾添加代码来实现。该 URL 可以通过论坛或社交媒体共享,然后当受害者单击它时执行代码。这会创建一个恶意网页,该网页似乎托管在信誉良好的网站上。 这个想法是,如果受害者信任目标网站,他们也应该信任看似属于该网站的恶意网页。恶意网页可以设计为窃取击键、重定向到其他页面和/或开始自动下载。 如何实现输入验证 输入验证并不难实现。您只需要弄清楚需要哪些规则来防止无效输入,然后将它们添加到系统中。
写入所有数据输入
创建所有可能的用户输入的列表。这将要求您查看所有用户表单并考虑其他类型的输入,例如 URL 参数。 创建规则 获得所有数据输入的列表后,您应该创建规则来规定哪些输入是可接受的。以下是一些要实施的通用规则。
- 白名单:只允许输入特定字符。
- 黑名单:防止输入特定字符。
- 格式:只允许符合特定格式的输入,即只允许电子邮件地址。
- 长度:只允许输入不超过一定长度。
实施细则 为了实施这些规则,您必须向网站或应用程序添加代码,以拒绝任何不符合规则的输入。由于无效输入带来的威胁,系统应在上线前进行测试。 创建响应 假设您希望输入验证也能帮助用户,您应该添加消息来解释为什么输入不正确以及应该添加什么。
输入验证是大多数系统的要求
输入验证是任何允许用户输入的网站或应用程序的重要要求。在无法控制向系统添加哪些输入的情况下,攻击者可以使用一系列可用于黑客目的的技术。 这些技术可以使系统崩溃、更改系统和/或允许访问私人信息。没有输入验证的系统成为黑客的热门目标,人们不断在互联网上搜索它们。 虽然输入验证主要用于安全目的,但它在告知用户添加错误时也起着重要作用。