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

发布于 2024-09-24 11:47:22 字数 195 浏览 6 评论 0 原文

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

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

这仍然安全吗?

I know there is no harm in adding it either way but I'm curious...

If I was to use htmlentities(); with ENT_QUOTES and then mysql_real_escape_string(); the variable before entering it into the Database, then just use html_entity_decode(); along with stripslashes(); to display the information...

Would this still be safe and secure?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

绝影如岚 2024-10-01 11:47:22

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

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

以下是正确的顺序:

  1. 从表单获取数据

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

    $quoted_input = "'" 。 mysql_real_escape_string($input) 。 “'”;
    
  3. 插入数据库

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

    $sql = "从 MyTable 中选择列 1";
    $结果= mysql_query($sql);
    $row = mysql_fetch_assoc($结果);
    $data = $row["列1"];
    
  5. 在输出时应用 htmlentities一次

    echo htmlentities($data);
    

You don't need to use htmlentities before storing data in the database. In fact, it makes things easier later if you don't. Only use htmlentities on strings as you echo them in HTML output (whether you fetched the string from a database or from some other source).

You don't need to apply stripslashes to data after you fetch it from the database. The database has not stored the extra escaping characters -- unless you applied double-escaping by mistake.

Here's the right sequence:

  1. Get data from a form

    $input = $_GET["input"];
    
  2. Apply escaping once.

    $quoted_input = "'" . mysql_real_escape_string($input) . "'";
    
  3. Insert it into the database

    $sql = "INSERT INTO MyTable (column1) VALUES ($quoted_input)";
    $success = mysql_query($sql);
    
  4. Later fetch it from the database

    $sql = "SELECT column1 FROM MyTable";
    $result = mysql_query($sql);
    $row = mysql_fetch_assoc($result);
    $data = $row["column1"];
    
  5. Apply htmlentities once as you output.

    echo htmlentities($data);
    
ヅ她的身影、若隐若现 2024-10-01 11:47:22

如果您知道这些函数的用途,也许您可​​以自己回答这个问题:

如果您只是想防止 SQL 注入,请对 MySQL 查询中使用的数据使用 mysql_real_escape_string。您还可以使用准备好的语句或参数化查询生成器(请参阅准备语句的 SQL 语法PDO – 准备语句和存储过程MySQLi::prepare 等)。

Maybe you can answer the question on your own if you know what these functions are intended to be used for:

If you just want to protect you from SQL injections, use mysql_real_escape_string for data that is used in MySQL queries. You could also use prepared statements or parameterized query builder (see SQL Syntax for Prepared Statements, PDO – Prepared Statements und Stored Procedures, MySQLi::prepare, et al.).

忘东忘西忘不掉你 2024-10-01 11:47:22

您是否在问您是否仍然需要正则表达式作为所有这些函数旁边的表单验证?

如果这就是您所问的问题,那么在我看来,是的,您永远都不够安全。我刚刚编写了一个验证类,其中的函数可以在需要特定输入时使用正则表达式清理代码和其他函数。

are you asking if you still need regex as form validation next to all those functions?

if that is what you are asking then in my opinion yes, you can never be safe enough. I've just written a validation class with functions that clean up the code and other functions with regex when I need a specific input.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文