Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在mySQL数据库中安全插入代码_Php_Mysql - Fatal编程技术网

Php 如何在mySQL数据库中安全插入代码

Php 如何在mySQL数据库中安全插入代码,php,mysql,Php,Mysql,我正在建立一个网站,用户可以使用PHP和mySQL数据库存储代码片段。但我不知道如何安全地将用户输入的代码插入我的数据库。我无法使用我通常使用的“安全”功能转换输入(trim,stripslashes,等等),因为关键是您可以查看在数据库中输入的代码。我已经查看了my_real\u escape\u string(),但是我看到它没有转义%和,它们可以用作MySQL通配符。这是否构成威胁,或者我可以直接使用我的\u real\u escape\u字符串?Thanx。使用参数化的insert语句。

我正在建立一个网站,用户可以使用PHP和mySQL数据库存储代码片段。但我不知道如何安全地将用户输入的代码插入我的数据库。我无法使用我通常使用的“安全”功能转换输入(
trim
stripslashes
,等等),因为关键是您可以查看在数据库中输入的代码。我已经查看了
my_real\u escape\u string()
,但是我看到它没有转义
%
,它们可以用作MySQL通配符。这是否构成威胁,或者我可以直接使用
我的\u real\u escape\u字符串
?Thanx。使用参数化的insert语句。实际上,即使在选择和更新时也要使用参数化


它将自动为您处理这些事情。

通配符仅在
选择查询中使用时生效,然后仅在使用某些函数时生效。因此,对于插入代码,可以使用
mysql\u real\u escape\u string()
,因为它们没有任何效果

为了更好,我建议您使用参数绑定。以下示例来自:


使用PDO:

$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('INSERT INTO fruit(name, colour, calories) VALUES(?, ?);');
$sth->execute(Array($calories, $colour));

使用
mysql\u real\u escape\u string()
可以为字符串值提供完整的保护。数据中可能存在
%
\
这一事实并不相关,它们不会构成安全威胁

对于int值,您需要验证它们是否实际是数字,或者将它们括在引号中:

$intValue = mysql_real_escape_string($_POST["intValue"]);
$query = mysql_query("INSERT INTO table SET intValue ='$intValue'"); 
                                                        // note the quotes
如果没有引号,
mysql\u real\u escape\u string()
对数值无效


然而,正如Daniel A. White已经说过的,如果你刚刚开始,就考虑使用它。它比旧的mySQL函数更新,并提供参数化查询,如果使用得当,将无法进行SQL注入

这就是我的工作原理,[adscript]是一段代码片段

<textarea rows="6" cols="80"><input name="adscript" type="text/javascript" class="text-input textarea" id="adscript"  value="<?php echo htmlentities($row['adscript']);?>" size="80" height="40" maxlength="1000"></textarea>

除了正常转义或参数绑定之外,通常使用
来屏蔽
表达式的占位符。前面的StackOverFlow问题可以回答您的问题:trim/StripSlash不是安全功能。在sql中,额外的空间从来都不是问题,除非您担心在固定长度的文本/字符串字段中丢失数据。stripslashes是PHP早期“魔术师之王”时代遗留下来的一堆愚蠢的废话。这不是我的反对票,但可以说这并不是对OP问题的真正回答。另外,您没有解释要使用哪个库
<textarea rows="6" cols="80"><input name="adscript" type="text/javascript" class="text-input textarea" id="adscript"  value="<?php echo htmlentities($row['adscript']);?>" size="80" height="40" maxlength="1000"></textarea>