如何保护来自黑客的$ _POST和params

时间:2015-11-05 13:34:49

标签: php post

我正在使用此html2canvas.js来生成和保存HTML图像。

我使用url params来完成这项工作 - 例如:website.com/?price=10&name=xxx

一切都好,直到这里 - 脚本工作正常 - 图片保存在/cart/ dir

<?php
$image = $_POST['image'];
$username = $_POST['username'];
$front_class = $_POST['front_plass'];
$decoded = base64_decode(str_replace('data:image/png;base64,', '', $image));
$date = date('d-M-Y-h-i-a', time());
$curdir = getcwd();
$cartDir = $curdir ."/cart";
$userDir = $cartDir.'/'.$username;
if (!file_exists($userDir)) {
    mkdir($cartDir.'/'.$username, 0777);
}
$name = $front_class."-front-".$date.".png";
$full_path = $userDir.'/'.$name;
$name1 = 'cart/'.$username.'/'.$name;
function ImageFillAlpha($image, $color) {
    imagefilledrectangle($image, 0, 0, imagesx($image), imagesy($image), $color);
}
function imageCreateCorners($sourceImageFile, $name, $radius) {
...
}
file_put_contents($full_path, $decoded);
imageCreateCorners($full_path, $name, 25);
echo '<img src="'.$name1.'" alt="front" id="front_img" />'; 
?>

和js

 html2canvas($('#front'), {
        "logging": true,
        //"proxy":"html2canvasproxy.php",
        "onrendered": function(canvas){
               var dataURL = canvas.toDataURL("image/png");
               $.post('image_front.php',{
                    image: dataURL,
                    username: username,
                    front_class: frontClass
               },function(data){
                    $('.imageHolder_front').html(data);
               });
        }
});

问题是有人昨天两次黑客攻击我想到这一点我需要保护$_POST或者params可能是问题吗?

请帮忙吗?我对后端开发并不是很好 - 更多的是前端。

感谢。

4 个答案:

答案 0 :(得分:0)

清理您的用户输入。一般来说:永远不要相信用户输入!

我会在这个问题的第一个答案中推荐@Charles写的非常好的文章:What are the best PHP input sanitizing functions?

答案 1 :(得分:0)

你犯了几个重大错误。

首先,验证你的POST数据@JohnConde说,不要直接在你的代码中使用它们。

其次,不要在服务器上创建具有777权限的目录,因为每个人都可以写入并以这种方式破解你。

答案 2 :(得分:0)

你不能保护&#34;参数。您的服务器是一个接收任意HTTP请求并返回HTTP响应的框。意识到这一点:任何人都可以随时向您的服务器发送包含他们希望的任何数据的任意HTTP请求。您无法控制某人发送给您的内容。您唯一能控制的就是使用这些数据。预计这些数据不符合您的期望。事实上,期望它是恶意的。验证它而不是假设它符合任何特定格式。永远不要盲目地在SQL查询或构建文件路径中使用用户提供的数据而不转义/绑定/验证/确认数据,或者您可能正在构建您不期望的字符串。

这是所有节目的一个基本事实。为此,您需要从头开始编写应用程序。没有简单的解决办法,只有勤奋。

答案 3 :(得分:-2)

即使您没有使用网址参数,黑客也可以入侵。

必须在后端完成。在与数据库交互之前,您需要检查参数是否符合您的预期。 例如,您不应该在params中允许使用单引号,这实际上允许黑客向您的查询添加更多查询。

使用mysqli预备语句