【问题标题】:Form validation - security表单验证 - 安全性
【发布时间】:2013-08-26 03:50:38
【问题描述】:

所以我正在处理一个注册表单,我有四个字段:姓名、用户名、电子邮件和密码。我在 jQuery 中获取这些字段的值,并根据是否填写了所有字段,通过 ajax 将它们传递给 PHP 脚本。这对表单验证安全吗?我担心数据会被用户操纵。

在 php 脚本中,我会检查是否所有发布的值都包含数据,然后我才会继续进行一些验证...验证是我担心它不是最好的部分,并且它有很多缺陷。

    $name = $_POST['name'];
    $username = $_POST['username'];
    $email = $_POST['email'];
    $password = $_POST['password'];


if (!preg_match("/^[A-Za-z '-]+$/i", $name)) {

        $errors = "Please enter a valid name.";

    } else if (!preg_match("/^[A-Za-z]+\s[A-Za-z]+$/", $name)) {

        $errors = "Please enter your first and last name.";

    } else if (strlen($username) <= 3 || strlen($username) > 15) {

        $errors = "Please pick a username between 4 - 15 characters. Be creative.";

    } else if (!preg_match("/^[A-Za-z][A-Za-z0-9_.-]{4,15}$/", $username)) {

        $errors = "Please pick an alphanumeric username between 4 - 15 characters.";

    } else if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {

        $errors = "Please enter a valid email.";

    } else if (strlen($username )< 6 || strlen($username) > 32) {

        $errors = "Your password must atleast be 6 characters.";

    } else {

        echo "valid";

    }

这些验证步骤是否安全?是否存在用户可以操纵数据的任何漏洞?另外,我希望输入全名,用户会输入名字和姓氏。这些够好吗?

谢谢。

【问题讨论】:

  • “安全”意味着没有上下文
  • 也可以在这里问webmasters.stackexchange.com
  • 如果您返回所有验证失败,而不是只返回第一个验证失败(运行所有测试,返回错误列表),可能会更好的用户体验。

标签: php javascript jquery ajax validation


【解决方案1】:

当您要求审查时,请阅读您在此处写的内容...

} else if (strlen($username )< 6 || strlen($username) > 32) {
    $errors = "Your password must atleast be 6 characters."

【讨论】:

  • 谢谢,没听懂。除此之外,一切都好吗?甚至是正则表达式?
  • @Elmer 不,一切都完全错误:1)空名称怎么样? 2)外国字符怎么样? strlen() 会撒谎。你需要编写一个层来处理这一切。看看它是如何在Zend Framework 2 中完成的
  • 第一个和第二个正则表达式冲突的结果。我也会在密码上添加更多规则。
  • 回复@davejust 写的内容;是的,在列出的范围内支持字符类。这些课程是国际化的(所以要处理法国口音等)。
【解决方案2】:

有时 java 脚本可能不是最好的解决方案,因为有些用户禁用了它。所以也考虑一下。

在向数据库插入数据时,我们应该考虑“sql 注入”、“加密方法”等。

我认为您应该阅读和研究更多互联网上的文章。试试这些链接。

http://www.sitepoint.com/form-validation-with-php/

http://www.w3resource.com/javascript/form/javascript-sample-registration-form-validation.php

http://www.hscripts.com/scripts/JavaScript/form-validation.php

【讨论】:

    【解决方案3】:

    我用这个

    $var = filter_var($_POST['xxx'], FILTER_SANITIZE_STRING);
    
    
    If (preg_match('/^([a-zA-Z]){4,15}$/', $var)){ // must character lower or upper, minimal 4 and max 15 characters
       $con1 = true;
    } else{
       $con2 = false;
    }
    
     // $cond2
     // $cond3
     // $cond4
    
     // CHECK ALL CONDITION BEFORE INSERT
     If (($cond1 && $cond2 && $cond3 && $cond4) == true){
        (with prepared statement)
        $sql = Insert into;
     } else{
      Header("Location: "); // if you redirect user to another page
      And echo the errors with ajax
     }
    

    希望你能考虑一下

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 2012-08-01
      相关资源
      最近更新 更多