我们应该在哪里将数据验证放在网站上?

时间:2012-08-02 14:26:16

标签: php javascript validation

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

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

双方验证可能是一项繁琐的工作,我想知道是否有某种方法可以做到这一点,以便你没有那么多重复的代码。

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

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

任何建议赞赏

3 个答案:

答案 0 :(得分:3)

  

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

真的不需要做客户端恕我直言。但是在提交数据之前能够通知用户是很好的。所以我称之为前。

  

双方验证可能是一项繁琐的工作,我想知道是否有某种方法可以做到这一点,以便你没有那么多重复的代码。

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

  

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

请告诉我你正在使用CSRF protection。 : - )

  

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

为防止恶意sql注入,您应该use prepared statements and parameterized queries

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

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

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

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

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