【问题标题】:How Do I Prevent Blank Data from being Inserted into a MySQL Table?如何防止空白数据插入 MySQL 表?
【发布时间】:2012-02-06 12:09:29
【问题描述】:

还有恶意插入

我看到有人问过这个问题,但没有一个回答对我有用(或者更确切地说,我太愚蠢了,无法让它们起作用)。我想我需要个性化的帮助。每次我刷新我的 php 页面时,它都会插入空白数据。如何防止插入空白和/或恶意数据。

这是我的代码:

 <?php

    $con = mysql_connect("localhost","user","pass") or die ("Couldn't connect!");
    if (!$con)
    {
        die('Could not connect: ' . mysql_error());
    }

    mysql_select_db("streams") or die ("Couldn't find db");

    $sql="INSERT INTO streams (streamname)
    VALUES ('$_POST[streamname]')";

    if (!mysql_query($sql,$con))
    {
        die('Error: ' . mysql_error());
    }

    echo "1 record added";


    mysql_close($con)

?>

<form action="submit.php" method="POST">
    Stream Name: <input type="text" name="streamname" id="streamname" /><br />
    <input type="submit" name="submit" value="Stream" />
</form> 

【问题讨论】:

  • 您没有验证 $_POST[streamname]。 “空白数据”是指 '' 或 NULL ?
  • 你有一个 SQL 注入漏洞。
  • @SLaks 我该如何保护?

标签: php mysql database


【解决方案1】:

用一些防御逻辑来包装它:

if(!empty($_POST['streamname'])) {

    // Your code here
}

【讨论】:

  • 另外,如果有人输入了一个空值,你应该给他们一个警告信息,说明这是一个必填字段,以便他们理解为什么表单不会提交。
  • 这包含了从mysql打开到关闭的整个php?
【解决方案2】:

您应该转义输入。

$sql='INSERT INTO streams (streamname)
VALUES ("'.mysql_real_escape_string($_POST[streamname]).'")';

【讨论】:

  • 虽然很重要,但这是一个评论,而不是对问题的回答。
  • 我认为这可能是一个修复,因为在此语句的插入中正确使用了数组引用。
  • @amccausl 转义字符串有什么作用?
  • 它将消除sql injection attach的可能性
  • @amccausl 我用你给我的东西编辑了我的代码。但它似乎弄乱了我的其他一些代码。现在,当我调用数据库而不是说类似的话时:嗨,我的名字是“数据”。它说你好,我的名字是“mysql escape (data)”。
【解决方案3】:

尝试检查是否设置了 POST 参数:

 <?php

if($_POST) {

    $con = mysql_connect("localhost","user","pass") or die ("Couldn't connect!");
    if (!$con)
    {
        die('Could not connect: ' . mysql_error());
    }

    mysql_select_db("streams") or die ("Couldn't find db");

    $sql="INSERT INTO streams (streamname)
    VALUES ('$_POST[streamname]')";

    if (!mysql_query($sql,$con))
    {
        die('Error: ' . mysql_error());
    }

    echo "1 record added";


    mysql_close($con);
}

?>

<form action="submit.php" method="POST">
    Stream Name: <input type="text" name="streamname" id="streamname" /><br />
    <input type="submit" name="submit" value="Stream" />
</form> 

【讨论】:

  • 设置了帖子参数并不意味着它们不会为空。
猜你喜欢
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 2012-01-06
相关资源
最近更新 更多