Я собираюсь продавать приложение на allsoft и возникает необходимость сделать выдачу полной версии программы по лицензионному ключу. В PHP разбираюсь не очень хорошо, сделал простой скрипт, который это реализует. Пожалуйста, посмотрите на него - есть ли какие-нибудь подводные камни у Apache\PHP которые позволят обходным путём получить этот файл или вторгнуться в БД?
В папке
private находятся exe-шники программ. Также там находится
.htaccess, который блокирует доступ в эту папку по обычным запросам:
Deny from all
Далее - пользователь может составить get-запрос к файлу get.php, который проверяет ключ на наличие в таблице и выдаёт файл если всё впорядкe
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$db = "db";
$dbh = new PDO("mysql:host=$servername;dbname=$db", $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$key = $_GET["key"];
$version = (int) $_GET["version"];
$stmt = $dbh->prepare("SELECT count(*) FROM `serial_keys` WHERE `key_str`= :kk");
$stmt->bindParam(":kk", $key);
$stmt->execute();
$number_of_rows = $stmt->fetchColumn();
if($number_of_rows == 1){
$file = "private/$version.exe";
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"App.exe\"");
header('Content-Length: ' . filesize($file));
readfile("$file");
}else{
echo "Неверный ключ!";
}
Запрос вида
site.com/get.php?key=DDD-XXX-BBB&version=1