Php 如何在mySQL数据库中安全插入代码
我正在建立一个网站,用户可以使用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语句。
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>