php - 如果我使用以下内容,正则表达式是否用于表单验证?

标签 php mysql regex validation code-injection

我知道以任何一种方式添加它都没有坏处,但我很好奇......

如果我要使用 htmlentities();用 ENT_QUOTES 然后用 mysql_real_escape_string();在将变量输入数据库之前,只需使用 html_entity_decode();连同 stripslashes();显示信息...

这仍然安全可靠吗?

最佳答案

在将数据存储到数据库之前,您不需要使用 htmlentities。事实上,如果你不这样做,以后事情会变得更容易。当您在 HTML 输出中回显字符串时,仅在字符串上使用 htmlentities(无论您是从数据库还是从其他来源获取字符串)。

从数据库中获取数据后,您无需对数据应用斜杠。数据库没有存储额外的转义字符——除非你错误地应用了双重转义。

这是正确的顺序:

  1. 从表单中获取数据

    $input = $_GET["input"];
    
  2. 应用转义一次

    $quoted_input = "'" . mysql_real_escape_string($input) . "'";
    
  3. 将其插入数据库

    $sql = "INSERT INTO MyTable (column1) VALUES ($quoted_input)";
    $success = mysql_query($sql);
    
  4. 稍后从数据库中获取它

    $sql = "SELECT column1 FROM MyTable";
    $result = mysql_query($sql);
    $row = mysql_fetch_assoc($result);
    $data = $row["column1"];
    
  5. 在输出时应用 htmlentities 一次

    echo htmlentities($data);
    

关于php - 如果我使用以下内容,正则表达式是否用于表单验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3761542/

相关文章:

php - 存储过程动态WHERE条件SQL

php - 将android应用程序链接到mysql数据库手机并链接信息

javascript - 手机号码验证(国际)

javascript - 根据用户年龄显示div

php - Cakephp 响应无法读取 UTF-8 文件名

php - 通过 PHP 使用 Eclipse BIRT 报告设计器

php - 如何确保在 PHP 中作为一个单元提交或中止 SQL 操作?

php - 如何在生产服务器中配置 Laravel 5.2.41(Redhat 7 with Apache 和 Mysql)

regex - 否定正则表达式 PO BOX

ruby-on-rails - 最佳实践 : Ruby/Rails Rspec regex testing