Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP、MySQL和AJAX的组合让用户能够在数据库中输入保留字符?_Php_Javascript_Mysql_Regex_Ajax - Fatal编程技术网

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

如何使用PHP、MySQL和AJAX的组合让用户能够在数据库中输入保留字符?,php,javascript,mysql,regex,ajax,Php,Javascript,Mysql,Regex,Ajax,我已经建立了一个网站,允许用户向数据库添加位置。但是,我不熟悉正则表达式,因此我不确定如何允许撇号和美元符号等字符,而不影响数据库插入 我有一个表单,由AJAX读取,并用PHP/MySQL处理,因此有些电子语言有自己的“保留”字符,可用于各种用途。实际上,在AJAX发送字符串之前,正则表达式需要放在我的Javascript中。我对Javascript还很陌生,所以我不知道该怎么做 有没有可能有人可以帮忙,但也解释一下这个正则表达式是如何工作的 干杯, Dan您绝对不应该在Javascript中使

我已经建立了一个网站,允许用户向数据库添加位置。但是,我不熟悉正则表达式,因此我不确定如何允许撇号和美元符号等字符,而不影响数据库插入

我有一个表单,由AJAX读取,并用PHP/MySQL处理,因此有些电子语言有自己的“保留”字符,可用于各种用途。实际上,在AJAX发送字符串之前,正则表达式需要放在我的Javascript中。我对Javascript还很陌生,所以我不知道该怎么做

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

干杯,
Dan

您绝对不应该在Javascript中使用客户端,任何客户端都会被篡改,并打开一个巨大的安全漏洞,如果您问这个问题,您可能很熟悉这个漏洞


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

基本上,在处理用户提交的数据时,您无法充分了解。Imo将正则表达式检查放在JavaScript区域是个坏主意,或者是不够的。您应该确保在任何地方(并且充分地)过滤此类数据

适用的常见筛选规则:

  • 尽可能控制用户输入(预定义变量、自动建议等)
  • 使用过滤掉任何不需要的输入,如html/script标记
  • 例如,使用事先准备好的陈述或尝试熟悉
  • 至少在插入到数据库之前使用

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


      一个很好的例子是

      简单地说,您希望为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();
      }
      
      $\u POST['user']
      可以是
      test';删除表用户--没有问题


      不幸的是,我不太记得如何使用JS,但我建议不要使用AJAX调用设置数据(禁用JS、NoScript、浏览器更清晰等)

      谢谢大家的帮助。这就是我一直在寻找的解决方案。Cheers mateI使用mysql\u real\u escape字符串,它提供了我需要的解决方案。干杯,伙计。我会注意注入,虽然我故意避免恶意注入,因为在这种情况下,我是唯一有权访问此页面的人(使用其他安全方法将其锁定得非常紧密),并且该页面的唯一用户是我的客户端(如果他们破坏了它,他们会为此付费,哈哈)。无论如何,谢谢你的建议:)我知道SQL注入,这是唯一一个未受保护的数据条目,因为我认为它只会被我的客户机使用