【问题标题】:How to validate a string in PHP + MYSQL?如何在 PHP + MYSQL 中验证字符串?
【发布时间】:2014-03-12 00:12:51
【问题描述】:

我正在使用带有准备语句的 PDO。

我正在使用 Javascript 加密来自 html textarea 的文本,在 PHP 中解密,添加一些文本,然后在将数据写入数据库之前重新加密数据。

我正在使用 PHP 从 db 中解密数据并将其放入 HTML5 页面中。

内容通常是 HTML 编码文本的结果。

addslashes、htmlentities 和 preg_replace...我能以最适合我的方式验证/过滤数据吗?

验证和过滤数据有什么区别?

我没有安全方面的经验。请帮助我找到最适合我的应用程序的方法。

提前致谢

【问题讨论】:

  • 如果您告诉我们为什么要加密以及如何加密,那么我们可以更好地回答。你真的需要加密数据吗?
  • 我使用 rsa 加密在 js 中生成的随机密钥,我用来加密用户插入的数据并将它们发送到 PHP...解密密钥并使用新的 AES 密钥重新加密data.then 我将加密的数据发送到数据库。 PHP 生成的新密钥是用 RSA 加密的,这次是 PHP 并与数据存储在同一记录中。
  • 你为什么要做这一切?你需要HTTPS吗? en.wikipedia.org/wiki/HTTP_Secure
  • @web2students.com 是的...但是 HTTPS 不会在我的数据库中保存加密数据...我必须在数据库中保存有关药物产品的化学测试...这些数据必须是以最安全的方式存储...谁可以访问数据库...不必了解正在读取的内容。
  • 坏主意。假设我在浏览器中停用了 javascript。现在您正在解密一个未加密的实体!你会得到什么?天知道……

标签: php mysql validation html-entities addslashes


【解决方案1】:

我认为这对我来说是一个很好的解决方案。

你怎么看?

 function clearPasswrod($value){


     $value = trim($value); //remove empty spaces
     $value = strip_tags(); //remove html tags
     $value = htmlentities($value, ENT_QUOTES,'UTF-8'); //for major security transform some other chars into html corrispective...

      return $value;
 }
 function clearText($value){

     $value = trim($value); //remove empty spaces
     $value = strip_tags(); //remove html tags
     $value = filter_var($value, FILTER_SANITIZE_MAGIC_QUOTES); //addslashes();
     $value = filter_var($value, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW); //remove /t/n/g/s
     $value = filter_var($value, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); //remove é à ò ì ` ecc...
     $value = htmlentities($value, ENT_QUOTES,'UTF-8'); //for major security transform some other chars into html corrispective...

     return $value;
 }
 function clearEmail($value){


     $value = trim($value); //remove empty spaces
     $value = strip_tags(); //remove html tags
     $value = filter_var($value, FILTER_SANITIZE_EMAIL); //e-mail filter;
     if($value = filter_var($value, FILTER_VALIDATE_EMAIL))
   {
     $value = htmlentities($value, ENT_QUOTES,'UTF-8');//for major security transform some other chars into html corrispective...
   }else{$value = "BAD";}  
     return $value;
 }

【讨论】:

  • @Newbi3 你怎么看?
【解决方案2】:

如果你想要验证?试试这个。

function clean($str) {
        $str = @trim($str);
        if(get_magic_quotes_gpc()) {
            $str = stripslashes($str);
        }
        return mysql_real_escape_string($str);
    }

然后像$username = clean($_POST['username']);这样使用它

【讨论】:

  • 老实说,我创建这篇文章是因为全世界都在博客文章中写了这句话“不要使用 MYSQL_REAL_ESCAPE_STRING,使用 PDO”......我正在使用 PDO......我想成为准备保护应用程序免受 xss crsf 和 sql_injection 攻击...无论如何谢谢@yul757
  • 那么如果您使用PDO,则无需验证。
  • @yul757...如果用户在我的输入区域添加了一些 javscript 文本,并且该文本将显示在 html5 页面中,我可能会遇到麻烦,添加斜杠 htmlentities 和其他功能...有那边有人可以帮我搞清楚
  • 您可以使用正则表达式来过滤输入。顺便说一句,过滤器意味着从通过它的任何东西中删除一些东西。 Validate 是使生效或确认生效的意思。我认为他们有相同的目的。
【解决方案3】:

这些是在 PHP 5.3 中添加的,请阅读手册,看​​看是否对您有帮助。

清理过滤器:

http://www.php.net/manual/en/filter.filters.sanitize.php

验证过滤器:

http://www.php.net/manual/en/filter.filters.validate.php

【讨论】:

  • Sanitize 将删除您输入的无效字符,并为您提供新的“干净”版本。 Validate 将测试它是否与您选择的电子邮件、布尔值、浮点数或其他模式匹配。例如,最好使用经过实战测试的代码而不是创建自己的正则表达式来“验证”您收到了正确的电子邮件。
猜你喜欢
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 2013-07-10
  • 2016-07-17
  • 2011-10-30
  • 2011-04-13
  • 1970-01-01
相关资源
最近更新 更多