我在这里看到:
您可能已经知道,仅依靠客户端验证是一个非常糟糕的主意.始终执行适当的服务器端验证.
你能解释为什么服务器端验证是必须的吗?
客户端验证-我以为你在谈论的网页在这里-依赖于JavaScript的.
JavaScript驱动的验证可以在用户的浏览器中关闭,由于脚本错误而失败,或者在不费力的情况下被恶意规避.
此外,表单提交的整个过程可以伪造.
因此,从来没有保证到服务器端,是干净安全的数据.
编写服务器应用程序有一个简单的规则:永远不要信任用户数据.
您需要始终假设恶意用户以您不想要的方式访问您的服务器(例如,在这种情况下通过手动查询curl
而不是预期的网页).例如,如果您的网页试图过滤掉SQL命令,则攻击者已经有一个很好的提示,即使用SQL命令传递输入可能是一个很好的攻击向量.
任何了解基本javascript的人都可以绕过客户端.
客户端用于改善用户体验(无需重新加载页面进行验证)
您正在与之交谈的客户可能不是您认为正在与之交谈的客户,因此可能无视您要求它进行的任何验证.
在网络环境中,用户不仅可能在浏览器中禁用了javascript,而且还有可能根本就没有与浏览器通话 - 您可能正在从机器人那里获取表格提交到你的提交网址,而根本没有看过表格.
在更广泛的背景下,您可能正在处理一个黑客客户端,该客户端正在发送真实客户端永远不会发送的数据(例如,针对FPS游戏的目标机器人),甚至可能是由反向设计您的线路协议的人创建的完全自定义客户端它对您期望执行的任何验证一无所知.
没有特定于Javascript和Web客户端并且更广泛地解决问题,服务器应该负责维护自己的数据(与底层数据库一起).
在客户端 - 服务器环境中,服务器应该为许多不同的客户端实现可以与之通信这一事实做好准备.考虑一个贸易准入制度.客户端可以是GUI(例如交易输入系统)和(比如)数据上载客户端(从.csv文件加载多个交易).
客户端验证可以以许多不同的方式执行,而不是全部正确.因此,服务器不一定信任客户端数据并且本身执行完整性检查和验证.
如果攻击者发布自己的表格.