1

我浏览了互联网上的许多主题和/或问题,以寻找明确的答案,但到目前为止还没有得到任何答案。

问题的一部分已经回答(除非你告诉我这是错误的)。数据验证应该在客户端和服务器端完成。客户端通知用户无效数据并卸载服务器和服务器以防止任何类型的攻击。

不过,在双方进行验证可能是一项乏味的任务,我想知道是否有某种方法可以做到这一点,这样您就不会有太多重复的代码。

我还想知道其他一些事情......我有一个表,其中包含该行的(数据库的)id。在每一行的末尾,我有一个删除按钮,可以将其从 html 中删除,我的 JSON 对象包含我的值数组,并被发送到要从数据库中删除的 ajax 调用(2 个表之间的链接)。

这不安全(在互联网等不安全的环境中),我知道。我总是可以检查客户端以查看 id 是否只是数字,如果是,则检查服务器端是否存在。但是谁告诉我用户没有进入调试器并反转了 2 行并最终删除了不应该的行?拥有我的 id 并避免人们倒置它们的最佳方法是什么?

任何建议表示赞赏

4

3 回答 3

3

数据验证应该在客户端和服务器端完成。

客户端恕我直言,实际上并不需要这样做。但是很高兴能够在提交数据之前通知用户。所以我称它为pre。

不过,在双方进行验证可能是一项乏味的任务,我想知道是否有某种方法可以做到这一点,这样您就不会有太多重复的代码。

因为 PHP 是服务器端,而 javscript 是客户端,所以要防止代码重复并不容易。我知道有一种方法是使用xhr requests。这样您就可以在 javascript(客户端)中使用 php 验证。

在每一行的末尾,我有一个删除按钮,可以将其从 html 中删除

请告诉我您正在使用CSRF 保护。:-)

我总是可以检查客户端以查看 id 是否只是数字,如果是,则检查服务器端是否存在。

为防止恶意 sql 注入,您应该使用准备好的语句和参数化查询

于 2012-08-02T14:31:56.953 回答
2

验证应始终在服务器上完成。客户端验证只是为了方便用户,从安全的角度来看并不是绝对必要的(除非它打开了 XSS 安全漏洞)。

除此之外,您应该清理从用户那里收到的每一个输入。在输入通过完整性检查后(例如,如果有文本应该有数字),您应该进行权限测试(用户是否具有执行请求的操作的适当权限?

完成此操作后,您就可以实际执行交易了。

于 2012-08-02T14:31:20.473 回答
0

由于已经发布了其他答案,我建议您专用一个可以调用 Utility 的实用程序类,并且您可以在其中存储许多有用的函数来检查服务器端的数据类型和内容,即使您会这样做在客户端和服务器端都进行了一些很好的验证,至少您的代码将更具可读性和可管理性。

创建和管理您自己的实用程序类的另一个好处是您可以轻松地在所有项目中使用它们。

例如,实用程序类可以包含各种方法,从验证某个字段是否在特定值范围内,或者它不包含特殊字符(使用正则表达式)等等......您的高级实用程序方法将专注于关于防止脚本插入,如前所述的 sql 注入。

总而言之,您将完成一次工作并一直从中受益,我确定您不想开始检查年龄字段是否为负数或您从头开始执行的每个项目。使用 Ajax 和 XHR 可以成为服务器端和客户端代码之间的桥梁,并帮助您统一验证并避免重复。

于 2012-08-02T14:44:11.937 回答