Php 单引号不解析

Php 单引号不解析,php,mysql,textarea,html-parsing,Php,Mysql,Textarea,Html Parsing,我有一个简单的表单,其中有一个文本区域,提交后可以更新数据库中的行!我希望我的用户能够输入单引号到它,但由于某些原因是没有得到解析! 这是我的解析文件 <?php $sql = "SELECT * FROM testimonials WHERE id='$pid'"; $pid = $_POST['pid']; $testtitle = htmlentities($_POST['ts_tt']); $testbody = htmlentities($

我有一个简单的表单,其中有一个文本区域,提交后可以更新数据库中的行!我希望我的用户能够输入单引号到它,但由于某些原因是没有得到解析! 这是我的解析文件

<?php
$sql = "SELECT * FROM testimonials WHERE id='$pid'"; 

      $pid = $_POST['pid'];
      $testtitle = htmlentities($_POST['ts_tt']);
      $testbody = htmlentities($_POST['ts_tb']);
      $compowner = htmlentities($_POST['ts_co']);
      $ownertitle = htmlentities($_POST['ts_ot']);
      $compname = htmlentities($_POST['ts_cn']);
      $compwebsite = htmlentities($_POST['ts_cw']);

      include_once "../php_includes/db_conx.php";

      $sql = "UPDATE testimonials SET testtitle='$testtitle', testbody='$testbody', compowner='$compowner', ownertitle='$ownertitle', compname='$compname', compwebsite='$compwebsite' WHERE id='$pid'";

      if (!mysql_query($sql, $connection)){
          die('Error: ' . mysql_error());
  }
  echo 'Testimonial has been Edited successfully. <br /><br /><a href="admin/">Click Here</a>';
  exit();
?>
使用

可在php中获得。这将转义特殊字符。

使用

addslashes

可在php中获得。这将转义特殊字符。

在查询中使用mysql\u real\u转义\u字符串($textareadata)。。。它将工作…

在查询中使用mysql\u real\u escape\u string($textareadata)。。。首先,如果您的环境允许,您应该与mysql功能分离。它们在PHP的下一个版本中是可用的,将来也不会可用。你应该换成或

是关于为什么不应该使用mysql_*函数的更多信息

其次,您正在接受用户输入,而不是将其转义以安全地插入数据库。在这种情况下,它只会导致您的查询失败,但如果有人需要一些技术知识,他们可以做很多事情来删除或更改数据库中的数据。这被称为SQL注入,是网站被黑客攻击的最常见方式之一

有两个要点可以让脚本使用更谨慎的处理。第一个是这个

$sql = "SELECT * FROM testimonials WHERE id='$pid'"; 
应该是

$sql = "SELECT * FROM testimonials WHERE id='".mysql_real_escape_string($pid)."'";
$sql = "UPDATE testimonials SET testtitle='".mysql_real_escape_string($testtitle)."', testbody='".mysql_real_escape_string($testbody)."', compowner='".mysql_real_escape_string($compowner)."', ownertitle='".mysql_real_escape_string($ownertitle)."', compname='".mysql_real_escape_string($compname)."', compwebsite='".mysql_real_escape_string($compwebsite)."' WHERE id='".mysql_real_escape_string($pid)."'";
二是

$sql = "UPDATE testimonials SET testtitle='$testtitle', testbody='$testbody', compowner='$compowner', ownertitle='$ownertitle', compname='$compname', compwebsite='$compwebsite' WHERE id='$pid'";
应该是哪一个

$sql = "SELECT * FROM testimonials WHERE id='".mysql_real_escape_string($pid)."'";
$sql = "UPDATE testimonials SET testtitle='".mysql_real_escape_string($testtitle)."', testbody='".mysql_real_escape_string($testbody)."', compowner='".mysql_real_escape_string($compowner)."', ownertitle='".mysql_real_escape_string($ownertitle)."', compname='".mysql_real_escape_string($compname)."', compwebsite='".mysql_real_escape_string($compwebsite)."' WHERE id='".mysql_real_escape_string($pid)."'";
注意,您可能还会发现,在第一次调用mysql\u real\u escape\u string之前,必须将数据库连接include向上移动

为了更详细地描述这种攻击是如何发生的,让我们假设您的第一个查询是从文本字段获取pid

$sql = "SELECT * FROM testimonials WHERE id='$pid'";
我是一个邪恶的黑客,只需输入

0'; update testimonials set testbody = '<script>window.location.href="http://www.compeditors-website.com";</script>';
0';更新推荐集testbody='window.location.href='http://www.compeditors-website.com";';
将被发送到数据库的是

SELECT * FROM testimonials WHERE id='0'; update testimonials set testbody = '<script>window.location.href="http://www.competitors-website.com";</script>';
从id='0'的推荐信中选择*;更新推荐集testbody='window.location.href='http://www.competitors-website.com";';

现在,当任何人进入你的推荐页面时,他们将被重定向到你的竞争对手网站

首先,如果您的环境允许,您应该将自己与mysql_uu功能分离。它们在PHP的下一个版本中是可用的,将来也不会可用。你应该换成或

是关于为什么不应该使用mysql_*函数的更多信息

其次,您正在接受用户输入,而不是将其转义以安全地插入数据库。在这种情况下,它只会导致您的查询失败,但如果有人需要一些技术知识,他们可以做很多事情来删除或更改数据库中的数据。这被称为SQL注入,是网站被黑客攻击的最常见方式之一

有两个要点可以让脚本使用更谨慎的处理。第一个是这个

$sql = "SELECT * FROM testimonials WHERE id='$pid'"; 
应该是

$sql = "SELECT * FROM testimonials WHERE id='".mysql_real_escape_string($pid)."'";
$sql = "UPDATE testimonials SET testtitle='".mysql_real_escape_string($testtitle)."', testbody='".mysql_real_escape_string($testbody)."', compowner='".mysql_real_escape_string($compowner)."', ownertitle='".mysql_real_escape_string($ownertitle)."', compname='".mysql_real_escape_string($compname)."', compwebsite='".mysql_real_escape_string($compwebsite)."' WHERE id='".mysql_real_escape_string($pid)."'";
二是

$sql = "UPDATE testimonials SET testtitle='$testtitle', testbody='$testbody', compowner='$compowner', ownertitle='$ownertitle', compname='$compname', compwebsite='$compwebsite' WHERE id='$pid'";
应该是哪一个

$sql = "SELECT * FROM testimonials WHERE id='".mysql_real_escape_string($pid)."'";
$sql = "UPDATE testimonials SET testtitle='".mysql_real_escape_string($testtitle)."', testbody='".mysql_real_escape_string($testbody)."', compowner='".mysql_real_escape_string($compowner)."', ownertitle='".mysql_real_escape_string($ownertitle)."', compname='".mysql_real_escape_string($compname)."', compwebsite='".mysql_real_escape_string($compwebsite)."' WHERE id='".mysql_real_escape_string($pid)."'";
注意,您可能还会发现,在第一次调用mysql\u real\u escape\u string之前,必须将数据库连接include向上移动

为了更详细地描述这种攻击是如何发生的,让我们假设您的第一个查询是从文本字段获取pid

$sql = "SELECT * FROM testimonials WHERE id='$pid'";
我是一个邪恶的黑客,只需输入

0'; update testimonials set testbody = '<script>window.location.href="http://www.compeditors-website.com";</script>';
0';更新推荐集testbody='window.location.href='http://www.compeditors-website.com";';
将被发送到数据库的是

SELECT * FROM testimonials WHERE id='0'; update testimonials set testbody = '<script>window.location.href="http://www.competitors-website.com";</script>';
从id='0'的推荐信中选择*;更新推荐集testbody='window.location.href='http://www.competitors-website.com";';

现在,当任何人进入你的推荐页面时,他们将被重定向到你的竞争对手网站

停止使用mysql函数,使用mysqliStop的pdo使用mysql函数,使用MySQlith的pdo如果他们必须使用mysql函数,他们实际上应该使用mysql\u real\u escape\u string如果他们必须使用mysql函数,他们实际上应该使用mysql\u real\u escape\u string