代码之家  ›  专栏  ›  技术社区  ›  Dan Hanly

如何使用PHP、MySQL和AJAX的组合使用户能够在数据库中输入保留字符?

  •  1
  • Dan Hanly  · 技术社区  · 14 年前

    我建立了一个网站,允许用户向数据库添加位置。但是,我不熟悉regex,因此我不知道如何允许撇号和美元符号这样的字符而不影响数据库插入。

    有没有可能有人能帮上忙,但也解释一下这个正则表达式是如何工作的?

    干杯,

    4 回复  |  直到 14 年前
        1
  •  2
  •   fabrik    14 年前

    适用的常见筛选规则:

    • 尽可能控制用户输入(预定义变量、自动建议等)
    • 过滤掉任何不需要的输入,比如html/script标签 strip_tags .
    • 使用事先准备好的语句或尽量熟悉 PDO 例如
    • 至少使用 mysql_real_escape_string
        2
  •  0
  •   roryf    14 年前

    你绝对不应该用Javascript做这个客户端,任何客户端都会被篡改,从而打开一个巨大的窗口 SQL Injection

    据我所知,字符串的内容不会影响Javascript或PHP,因为它是一个字符串。它需要在插入数据库之前进行转义,请查看 mysql_real_escape_string

        3
  •  0
  •   Fanis Hatzidakis    14 年前

    不需要涉足正则表达式。在最后一个可能的步骤(这里是PHP)中进行验证,并在一个众所周知且经过测试的数据库库中使用准备好的语句。准备好的陈述会适当地引用你对他们的任何批评。

    MDB2

        4
  •  0
  •   Alan Pearce    14 年前

    简单地说,您希望为PHP/SQL部分使用准备好的语句。带PDO:

    try {
        $dbh = new PDO($dsn,$user,$password);
        $stmt = $dbh->prepare('INSERT INTO users SET username = :user');
        $stmt->bindParam(':user',$_POST['user']);
        $stmt->execute();
        if ($stmt->rowCount == 1) {
            //success
        } else {
            //fail
        }
    } catch (PDOException $e) { //Unhandled may expose $user/$password
        echo 'Database connection failed: ' . $e->getMessage();
    }
    

    $_POST['user'] test'; DROP TABLE users; -- 没有问题