5

在使用JS发送到带有JS或服务器端的服务器之前验证用户输入是否更好?或者,为了安全起见,做这两件事值得吗?用户输入验证,客户端或服务器端? [PHP/JS]

我正在创建一个网站(目前非常简单),它具有成员区域/管理区域等。目前我只有用户输入用户名和密码,将来会有更多(电子邮件,地址等),但检查数据的最佳做法是什么?

我是否在它上面加载了'if ... else'语句,直到用户获得正确的语句为止?或者可能为用户输入的每个值分别设置变量,并将其设置为true或false,如果它是正确的或错误的? (如电子邮件验证,以确保它是电子邮件格式)

有很多方法可以做到这一点,但你会建议哪些?我不想写50行代码,当我可以做10行的工作......如果这是有道理的:p

任何帮助将不胜感激,谢谢! :)

回答

8

服务器端验证是必须,客户端验证是

如果你只使用客户端验证,恶意的人会破解你的系统发布未经验证的东西 - 破坏你的脚本,并可能利用你的系统。从安全角度来看,这是非常差

也就是说,您还应该包含客户端验证,因为这比往返服务器的速度快得多,并且可以为用户提供即时反馈。这会让用户满意,并让他们回到您的网站。

因此,如果可能的话,同时使用。如果你不能/不会,那么至少在服务器端做它。仅客户端验证是灾难的秘诀!

5

两者兼而有之。

客户端提供用户期望的响应能力,服务器端保护您的数据。

我相信PHP有一些库,它可以帮助你很像ASP.NET MVC提供的一种方法。

4

出于安全原因,输入验证肯定应该发生在服务器端。

但是,为避免向服务器发送无效数据请求并将响应发送回客户端,最好还要进行客户端验证。这将使您的网站更具响应能力。所以添加客户端验证用户友好。

0

验证,总是服务器端。我可以篡改你的表单客户端并填写疯狂的值,并且仍然得到验证。我不能篡改服务器端脚本。

因此,当检查客户端时,你只是在与服务器“交谈”时节省一点时间。切勿用它来真实验证您的数据。

+2

让我wounder你为了生活做什么;)我理解你的话,尽管如此,我最好确认我在网站发布之前验证了所有内容我现在然后 – Shogun 2012-01-09 21:26:31

0

当然,你不能只依靠JavaScript,如果有人禁用了它,该怎么办?JavaScript只是为了让用户对用户更友好,并且每次他犯了错误,他都不必等待服务器。服务器端是你自己使用的,以免你的系统出现错误!

0

您应该在服务器端进行验证。客户端验证是可选的。 您可以声明字段的验证类型,并为您的表单构建通用验证器。如果您不知道我的意思,请尝试查看AngularJs声明性代码构建。这是构建表单的最佳方式,Angular也是构建表单的好且快速的框架。

http://angularjs.org/

http://docs.angularjs.org/#!/cookbook/advancedform

看这行:

<input type="text" name="form.address.line1" size="33" ng:required/> <br/> 
    <input type="text" name="form.address.city" size="12" ng:required/>, 
    <input type="text" name="form.address.state" size="2" ng:required ng:validate="regexp:state"/> 
    <input type="text" name="form.address.zip" size="5" ng:required 
    validate="regexp:zip"/> 

对于服务器端,你也可以定义一些结构,其中将包含表单域,验证方法和错误字符串每个领域。然后在循环中,根据您的信息结构验证每个字段。您可以轻松管理这种方式构建的表单。

实施例在PHP:

表格数据:

$formData = array (
    array(
    'ID' => "name", 
    'validate' => '/.+/', 
    'label' => 'Your name', 
    'errorMsg' => "This field is required", 
    'type' => 'text' 
    ), 
array(
     'ID' => "Phone number", 
     'validate' => '/^[0-9+ ]+$/', 
     'label' => 'Numer telefonu', 
     'errorMsg' => "Please provide proper telephone number", 
     'type' => 'text' 
     ) 
); 

验证和形式发生器(抱歉简单和杂乱代码在这里):

$s = ''; 
foreach ($formData as $input){ 
    $s .= sprintf('<label for="%s">%s</label>',$input['ID'],$input['label']); 
    if (isset($_POST[$input['ID']]) && !empty($input['validate']) && !preg_match($input['validate'],$_POST[$input['ID']])){ 
     $error = true; 
     $s .= sprintf('<div class="formErrorValidate">%s</div>',$input['errorMsg']); 
    } 
    if (isset($_POST[$input['ID']])) $htmlMsg = str_replace('%'.$input['ID'].'%',$_POST[$input['ID']],$htmlMsg); 
    if ($input['type'] == 'textarea'){ 
     $s .= sprintf('<textarea name="%s" id="%s">%s</textarea>',$input['ID'],$input['ID'],(isset($_POST[$input['ID']])?$_POST[$input['ID']]:'')); 
    } else { 
     $s .= sprintf('<input type="%s" name="%s" id="%s" value="%s"/>',$input['type'],$input['ID'],$input['ID'],(isset($_POST[$input['ID']])?$_POST[$input['ID']]:'')); 
    } 

}

+0

我从来没有真的想过这样做,它似乎是一个非常简单的方式来生成和验证窗体,感谢回复:) – Shogun 2012-01-09 21:23:29

相关问题