Mar*_*tin 2 php mysql security mysql-real-escape-string code-injection
我有一个文件"submit.php",它将从"choose-product.php"中的前一个表单提交的一系列值写入MySQL数据库.我已经mysql_real_escape_string按照上一个问题中的建议使用了,但是我注意到如果我将"choose-product.php"文件上传到单独的服务器并将表单的开头更改为
<form name="form" id="form" action="http://www.myserver.com/submit.php" method="post">
Run Code Online (Sandbox Code Playgroud)
这也将为数据库写一系列值.显然这非常糟糕!现在,我知道有一种方法可以解决这个问题,但由于这是我第一次编写这样的代码,我有点难过.
以下是完整代码submit.php:
<?php
include("db.php");
function random_string() {
$character_set_array = array();
$character_set_array[] = array('count' => 7, 'characters' => 'abcdefghijklmnopqrstuvwxyz');
$character_set_array[] = array('count' => 1, 'characters' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ');
$character_set_array[] = array('count' => 3, 'characters' => '0123456789');
$character_set_array[] = array('count' => 1, 'characters' => '!@#$*&:');
$temp_array = array();
foreach ($character_set_array as $character_set) {
for ($i = 0; $i < $character_set['count']; $i++) {
$temp_array[] = $character_set['characters'][rand(0, strlen($character_set['characters']) - 1)];
}
}
shuffle($temp_array);
return implode('', $temp_array);
}
$key = random_string();
if($_SERVER["REQUEST_METHOD"] == "POST") {
$productid = mysql_real_escape_string($_POST['productid']);
mysql_query("INSERT INTO sales VALUES('','$productid','$key',CURRENT_TIMESTAMP,'','active')");
echo "
<form action='XYZ' id='BB_BuyButtonForm' method='post' name='BB_BuyButtonForm' target='_top'>
<input name='item_name_1' type='hidden' value='Test item 1'/>
<input name='item_description_1' type='hidden' value='Testing item sales'/>
<input name='item_quantity_1' type='hidden' value='1'/>
<input name='item_price_1' type='hidden' value='0.5'/>
<input name='item_currency_1' type='hidden' value='GBP'/>
<input name='shopping-cart.items.item-1.digital-content.url' type='hidden' value='http://www.XYZ.com/download.php?key=$key'/>
<input name='_charset_' type='hidden' value='utf-8'/>
<input alt='' src='XYZ' type='image'/>
</form>
";
}
?>
Run Code Online (Sandbox Code Playgroud)
欢迎使用HTTP协议.
http://www.myserver.com/submit.php可以随时被任何人调用.调用的表单可以在任何其他网页上.或者用户可能根本不会从表单中调用它,但可以使用命令行工具来提交数据.这个工具可以声称是一个网络浏览器,你不会知道.
我猜你的Q:
您是否依赖choose-product.php为submit.php提供某种安全性?
你不能.
您必须在submit.php上进行所有安全性检查,即使您刚刚在5秒前完成了choose-product.php的检查.
| 归档时间: |
|
| 查看次数: |
456 次 |
| 最近记录: |