php - 如何使输入值成为 mysql 行?

标签 php mysql

super 后期编辑(重要):请不要将此问题用作任何类型的教程。这里显示的示例对于任何攻击来说都是一场绝对的噩梦。我无法删除该问题,但请帮自己一个忙并关闭此选项卡。如果您将此处提供的 PHP 代码的某些部分放入此处,那么您的网站就会对最简单的 SQL 注入(inject)开放 - 如果您设法使其运行,因为即使在提出此问题时,此处显示的方法也已被弃用。如果您将此代码放入任何页面,则接受的答案会对您的网站产生所有可能的危险。谢谢。

我想要的只是一个具有 MySQL 行值的输入:

 <?php
  ob_start();
  session_start();
  require_once 'dbconnect.php';
  $results = mysqli_query($con,"Select * FROM users WHERE userName                             ='$username'");
 while ($name = mysqli_fetch_array($results))
 {
 extract($row);
 }

  // if session is not set this will redirect to login page
  if( !isset($_SESSION['user']) ) {
   header("Location: index.php");
   exit;
  }
  // select loggedin users detail
  $res=mysql_query("SELECT * FROM users WHERE userId=".$_SESSION['user']);
  $userRow=mysql_fetch_array($res);
 ?>
 <!DOCTYPE html>
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 You just have logged in, so now you can go to your personal folder:<br>
 <?php
 if (isset($_POST['bt']))
 {
header("Location: http://yougle.rf.gd/" . $_POST['folder']);
 }
 ?>
 <html>
 <form id="form1" name="form1" method="post" action="<?php echo                $_SERVER['PHP_SELF']; ?>">
     <input type="text" name="folder" id="folder" value=<?php echo      $name[userName] ?>>
<input type="submit" name="bt" id="bt" value="Go To" />
</form>
</body>
</html>
<?php ob_end_flush(); ?>

正如你所看到的,我有表单...但是该字段是空的...我已经检查了所有变量(在数据库中是否相同),一切看起来都很好。

最佳答案

我几乎不知道从哪里开始。

  1. 您对 SQL 注入(inject)持开放态度。您不应该使用 mysql_* 函数。它们已被弃用并从当前的 PHP 版本中删除。而是使用 PDOmysqli带有准备好的语句和绑定(bind)参数。
  2. 您(我假设)不必要地缓冲输出,以此来回避您不必要地发送 header() 的事实。内容被回显后。
  3. 你的 HTML 太糟糕了。两个<html>标签,无 <body>标签等。
  4. 这里有语法错误:echo $name[userName]因为userName不是一个定义的常数。试试enabling error reporting你应该看到这个。
  5. 最后,为了锦上添花,您通过回显 $_SERVER['PHP_SELF'] 获得了 XSS 漏洞。直接到浏览器。 http://www.html-form-guide.com/php-form/php-form-action-self.html解释如何使用htmlentities逃避这些数据可以缓解这个问题。

就我个人而言,我更喜欢谨慎行事,将所有未硬编码到脚本中的变量绑定(bind)到查询,并在将其回显到浏览器之前正确转义所有内容,这样我就不必考虑其他内容可能会一路操纵这些值。

关于php - 如何使输入值成为 mysql 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454120/

相关文章:

python - 随机用户可以访问 mysql 数据库

javascript - 我在使用 PHP 从 Javascript 中提取值时遇到问题

php - Laravel 如何定义文件和目录的基本路径?

php - 将 CSS 添加到 DomPDF

php - 当来自 URL 的数据很小时,JSON 对象为 NULL?

c# - 如何从 Windows 窗体中的 MySQL 获取图像

mysql查询根据多个条件连接4个表

php - 解析 json 错误 : SyntaxError: JSON. 解析:JSON 数据的第 1 行第 2 列出现意外字符

php - 当该单元格没有数据时,我想在表格中显示一个空单元格

sql - 在存储过程中使用 LOCATE 字符串函数