在使用JS或服务器端使用PHP发送到服务器之前验证用户输入是否更好?或者,为了安全起见,这两个值得做两件事吗?
我正在创建一个拥有会员区/管理区/等的网站(目前非常简单)。目前我只有用户输入的用户名和密码,将来会有更多(电子邮件,地址等),但最新的检查数据是什么?
我是否会在其上抛出一堆'if ... else'语句,直到用户正确使用它为止?或者可能为用户输入的每个值都有单独的变量,如果正确或错误,则将其设置为true或false? (如电子邮件验证,以确保它是电子邮件格式)
有很多方法可以做到,但你会建议哪些?当我能够完成10行代码时,我不想写50行代码......如果这样做有意义:p
任何帮助将不胜感激,谢谢! :)
答案 0 :(得分:8)
服务器端验证是必须,客户端验证是加。
如果你只使用客户端验证,那些邪恶的人会破解你的系统发布未经验证的东西 - 破坏你的脚本,并可能利用你的系统。从安全角度来看,这非常糟糕。
也就是说,您还应该包括客户端验证,因为这比往返服务器要快得多,并为您的用户提供即时反馈。这将让您的用户满意,并让他们回到您的网站。
因此,如果可能,同时使用。如果你不能/不会,那么至少在服务器端做。仅客户端验证是灾难的秘诀!
答案 1 :(得分:5)
同时执行。
客户端提供用户期望的响应能力,服务器端保护您的数据。
我确信PHP有一些库可以帮助你,就像ASP.NET MVC一步提供两种方式一样。
答案 2 :(得分:4)
出于安全原因,输入验证当然应该在服务器端进行。
但是,为了避免向服务器发送包含无效数据的请求并将响应发送回客户端,也可以进行客户端验证。这将使您的网站更具响应性。因此,为用户友好性添加客户端验证。
答案 3 :(得分:0)
验证,总是服务器端。我可以篡改您的表单客户端并填写疯狂的值,仍然得到验证。我无法篡改服务器端脚本。
因此,在检查客户端时,您只需节省一点时间与服务器“交谈”。切勿使用它来验证您的数据是否真实。
答案 4 :(得分:0)
当然,你不能仅仅依靠JavaScript,如果有人禁用它会怎么样? JavaScript只是为了让网站对用户更友好,并且每次出错时都不必等待服务器。服务器端供您自己使用,以免在您的系统上出错!
答案 5 :(得分:0)
您应该在服务器端验证这一点。客户端验证是可选的。 您可以声明字段的验证类型,并为表单构建通用验证器。如果您不知道我的意思,请尝试查看AngularJs声明性代码构建。这是构建表单的最佳方式,Angular也是构建表单的良好且非常快速的框架。
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']]:''));
}
}