如果用户写'(撇号)它会破坏代码,如何阻止它?

时间:2014-06-23 10:08:09

标签: php mysqli preg-match

所以,我有这段代码:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
   if (empty($_POST["name"])) {
       $nameErr = "This field is required";
    } else {
       $name = test_input($_POST["name"]);
       if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
           $nameErr = "Only letters allowed";
       }

它工作正常,但有一个问题,如果用户写'(撇号)怎么办? 我自己尝试了,它以某种方式破坏了代码,因为它永远不会到达数据库,我无法将撇号添加到preg_match,因为这会破坏代码本身并且无法正常运行!

所以我的问题是,如何阻止用户写''(撇号)?

感谢阅读。

1 个答案:

答案 0 :(得分:3)

您是否应该停止用户编写撇号,还是为此类情况准备代码?今天是撇号,明天是双引号,你不能管理每一个符号(想想其他字母)。

如果要直接将其添加到数据库,请使用MysqliPDO(或您使用的任何数据库管理系统)转义方法转义符号。否则,您的代码可能存在真正的危险,尤其是因为SQLInjection。在xkcd的漫画中,这里展示了可能发生的一个相当好的例子,但想象一下这个输入:

test'); drop table important_data;--

是的,你是(至少在这种情况下并在用你的正则表达式验证之后)覆盖了这个问题,但这可能发生在你的代码周围的每一个地方(假设一个评论表,你可以写任何东西)。 始终逃避每个用户输入。它将保护您免受许多未来问题的影响。