Bootstrap HTML + MySQL PHP 表单安全性

Posted

技术标签:

【中文标题】Bootstrap HTML + MySQL PHP 表单安全性【英文标题】:Bootstrap HTML + MySQL PHP Form Security 【发布时间】:2014-03-05 21:01:36 【问题描述】:

我使用 Bootstrap 制作了一个 html 表单。我使用“必需”来确保在某些字段中填充数据以提交表单。此表单转到打开数据库连接的 php 脚本,根据提交的表单输入值,指向感谢页面并关闭连接。

这是我的第一手编码表格,我关心的是安全性。如何阻止黑客/垃圾邮件发送者?

请您指出我的代码存在的问题,以便我在发布之前解决这些问题。请温柔,我是一个有大约 3 个月编码经验的新手。

请注意,原始表单实际上有 9 个字段,但我已经省略了它,假设这些细节对于本次讨论不是必需的。

HTML 代码

<form class="form-horizontal" method="post" action="vacancy.php">
  <div class="form-group">
    <label for="company" class="col-sm-3 control-label">Company Name *</label>
      <div class="col-sm-6">
        <input type="text" name="company" class="form-control" placeholder="Enter Company Name" required />
      </div>
  </div>    
  <div class="form-group">
    <label for="contactperson" class="col-sm-3 control-label">Contact Person *</label>
      <div class="col-sm-6">
        <input type="text" name="contactperson" class="form-control" placeholder="Enter Full Name" required />
      </div>
  </div>
  <div class="form-group">
    <label for="designation" class="col-sm-3 control-label">Designation *</label>
      <div class="col-sm-6">
        <input type="text" name="designation" class="form-control" placeholder="Enter Designation" required />
      </div>
  </div>  
  <div class="form-group">
    <div class="col-sm-offset-3 col-sm-6">
      <button type="submit" class="btn btn-primary">Submit</button>
      <button type="reset" class="btn btn-default">Clear</button>
    </div>
  </div>
</form>

PHP 代码

<?php
  $con=mysqli_connect("localhost","db2u","password","db2");
    if (mysqli_connect_errno())
     
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
     
  $sql="INSERT INTO vacancy (Company, ContactPerson, Designation)
  VALUES
  ('$_POST[company]','$_POST[contactperson]','$_POST[designation]')";
    if (!mysqli_query($con,$sql))
     
      die('Error: ' . mysqli_error($con));
     
    header("Location: thankyou.html");
  mysqli_close($con);
?>

编辑:所以看来我需要验证。我在看 jqBootstrapValidation。甚至考虑 htmlspecialchars (更容易)。我相信两者都会做得同样好,对吧?目前 PDO 对我来说有点太多了。

【问题讨论】:

我没有仔细查看您的代码,但没有输入验证。基本上,目前您允许任何人输入任何内容,包括会破坏您的数据库的内容等。这是一个很大的话题,但您可以通过使用诸如 codeigniter 之类的框架轻松开始,它为您做了很多这些事情,或者买一本书带有一些模板代码。 O'Reilly 称为 html php 和 mysql 之类的东西是一个不错的起点。 How can I prevent SQL injection in PHP? 的可能重复项 【参考方案1】:

您的代码可能会受到 SQL 注入 http://en.wikipedia.org/wiki/SQL_injection 的影响。

尝试使用htmlspecialchars 或更好地使用PDO 而不是OLD 和DANGEROUS mysql_* 函数。

【讨论】:

他已经在使用 MySQLi。 htmlspecialchars 也不能帮助防止 SQL 注入,MySQL 扩展也没有危险,它只是被弃用了。【参考方案2】:

您尚未验证 php 代码中的任何字段, 您也应该将验证放入 php 文件中,任何用户都可以从输入中删除“必需”并可以发布数据。

【讨论】:

【参考方案3】:

永远不要相信用户输入。您应该使用 mysqli_real_escape_string() 函数转义字符串。 http://www.php.net/manual/en/mysqli.real-escape-string.php

$company = mysqli_real_escape_string($_POST[company]);

$contactperson = mysqli_real_escape_string($_POST[contactperson]);

$designation = mysqli_real_escape_string($_POST[designation]);

$sql="INSERT INTO vacancy (Company, ContactPerson, Designation) VALUES ('$company','$contactperson','$designation')";

【讨论】:

我还建议执行某种验证。用户输入有意义吗?例如。在将给定的电子邮件地址写入数据库之前检查其格式是否有效。 当我这样做时(我记得之前也尝试过),我的桌子是空的。 ID 计数器增加但没有数据。 您能评论一下您尝试插入的数据示例吗? 文本主要。一个网站。一封电子邮件。电话号码。国家选择有一个下拉菜单。一个查询框。在mysql中全部配置为VARCHAR(255)。 尝试调试它来定位问题。 var_dump($_POST[]); 在 mysqli_real_escape_string() 函数之前。然后在执行查询之前var_dump($sql);

以上是关于Bootstrap HTML + MySQL PHP 表单安全性的主要内容,如果未能解决你的问题,请参考以下文章

springmvc mybatis(oracle 和 mysql sqlsever) HTML5 全新高大尚后台框架 bootstrap

Bootstrap HTML + MySQL PHP 表单安全性

springmvc+mybatis+spring 整合 bootstrap html5 mysql oracle SSM框架源码 SSH maven

springmvc+mybatis+spring 整合 bootstrap html5 mysql oracle SSM框架源码 SSH maven

springmvc4 mybatis 整合 框架源码 bootstrap html5 mysql oracle sqlsever spring SSM

java后台框架 springmvc整合mybatis框架源码 bootstrap html5 mysql oracle