php验证 - 在函数内部还是外部?

时间:2011-10-15 14:15:04

标签: php security validation

验证数据的正确方法是什么?我的意思是说你有一个插入函数:

function newUser($name, $lastname, $age) {

   // some validation process

   $this->pdo->prepare("INSERT INTO user VALUES (?,?,?)", 
                       array($name, $lastname, $age)); // this is another class
                                                       // that runs execute in itself

}

基本上,问题是//some validation procecss部分是应该在newUser函数中发生还是应该在函数外部完成?我问这个是因为我正在编写一个请求类,我将在该类中存储基本验证规则并自动过滤我的getpost值。所以,如果我这样做,如果我也在newUser中验证(类似于其他类似的函数),这意味着我将验证相同的输入两次或三次。

简而言之,如果我假设传递给函数newUser的变量已经过验证,那有什么不对吗?在这种情况下,我还假设只从我的应用程序调用newUser(我不确定第三方是否也可以在未经我许可的情况下运行该函数,这实际上是我提出问题的原因)因此变量已经过验证在调用newUser函数之前。

P.S:对不起,如果问题是以复杂的方式提出的,如果您不明白我的意思,请发表评论。

2 个答案:

答案 0 :(得分:2)

如果我是你,我会做一个验证课,它包含各种验证(对于电子邮件,字符串,数字,字符串和数字)。

根据您对函数中的变量的要求,验证它们并将它们放在数据库中。

如果您确保安全编写脚本,则第三方不能运行您的功能。

示例如何不编写脚本:

include( $_GET['file'] );

基本上,我可以使用您网址中的?file参数将自己的文件包含在您的系统中。也可以通过查询来实现:

mysql_query( "INSERT INTO table (row) VALUES (". $_GET['value'] .")" );

您应该始终检查可以从脚本外部访问的参数,因此在您创建新用户的情况下,您需要在将新用户函数放入数据库之前对其进行验证。

答案 1 :(得分:2)

这取决于你的工作方式。例如,如果您使用的是MVC模式,则应在Controller中进行测试(因此不在您使用的函数中)。 在您的情况下,您必须选择是否必须使用验证函数(或者类的方法)验证数据,然后使用您编写的插入数据或使用此函数来确保它们。我会建议你第一个解决方案,所以“插入”功能只能完成一项任务。

为了改进我的答案,我建议您至少为SQL注入和XSS(跨站点脚本)确保数据。