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