【问题标题】:html_entities Vs strip_tags with mysql_real_escape_stringhtml_entities 与带 mysql_real_escape_string 的 strip_tags
【发布时间】:2014-07-05 21:01:14
【问题描述】:

我对 Strip_tagshtml_entitiesmysql_real_escape_string 有疑问。

现在当我使用例如:

strip_tags(mysql_real_escape_string($_POST['username']));

上面的代码和这个一样安全:

html_entities($_POST['username']);

对于现实世界的项目,哪个更安全。

同时使用 strip_tagsmysql_real_escape_string 有什么好处。但是当我与他们一起使用 html_entities 时,它就不起作用了

【问题讨论】:

    标签: php html-entities mysql-real-escape-string strip-tags


    【解决方案1】:

    首先你必须明确目的。没有万能的逃避。

    htmlspecialcharshtmlentities

    目的

    将用户输入显示为 HTML

    示例

    <div><?php echo htmlspecialchars($_POST['data'], ENT_QUOTES, 'UTF-8') ?></div>
    

    注意

    当您要显示它时使用此功能。不要将其应用到预先存储到变量中。

    这个变量是否已经被转义了...?

    ...你可能会麻烦自己。

    strip_tags

    请勿使用此功能。 SANITIZE 是错误的方法。

    mysql_real_escape_string

    目的

    SQL 中设置用户输入。

    示例

    <?php
    $sql = sprintf(
        "SELECT * FROM table WHERE name = '%s' AND address = '%s'",
        mysql_real_escape_string($_POST['name'], $link),
        mysql_real_escape_string($_POST['address'], $link)
    );
    

    注意

    mysql_* 函数全部弃用。你最好使用PDOPDO 为我们提供 Prepared StatementsPlaceholders,而不是转义。

    PHP Manual - PDO::prepare

    【讨论】:

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