- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте.
Человек А обращается к файлу 1.php и там во взаимодействии с интерфейсом может посредством AJAX делать запрос к 2.php и там же (в 1.php) не перегружая страницу получать результат.
2.php возвращает на POST запрос XML ответ, который 1.php обрабатывает и выводит на экран.
Но есть человек B, который сделал свой интерфейс и посредством подделки реферера получает информацию из 2.php и выводит у себя.
Вопром: Как сделать, не нарушая принцип работы, защиту для 2.php, которая не позволит ему запускаться кроме как через 1.php? Т.е. чтобы по прямому обращению к нему, он не давал ответ.
define и defined
1 и 2 связываются (гетом|постом) или инклудом?
define и defined
1 и 2 связываются (гетом|постом) или инклудом?
сейчас они вообще никак не связаны ср-ми php)
Листинг для 1.php
function parseXml(xml)
{
// разбираем ответ
}
function SomeF() {
data = "?asd=213";
$(document).ready(function()
$.ajax({
type: "POST",
url: "2.php"+data,
dataType: "xml",
success: parseXml
});
});
}
Листинг 2.php
<?php
$abc = htmlspecialchars($_GET['asd']);
$whois = getenv("HTTP_REFERER");
If ($whois <> "our_site") {
$abc = 0;
}
Else {
$abc = $abc+1
}
?>
<?php
header('Content-type: text/xml');
echo <<<END
<?xml version="1.0" encoding="UTF-8"?>
<ans>
<a1>{$abc}</a1>
</ans>
END;
?>
приблизительно так
Т.е. чтобы по прямому обращению к нему, он не давал ответ.
проверять метод запроса (не пропускать GET) и Refferer
проверять метод запроса (не пропускать GET) и Refferer
Рефер подделывается, запрос (пост или гет) можно тоже выбирать. Не канает.
"ключик" добавьте
2.php?mysecretkey=yahahahah_you_are_fucking_hacker_lamer
ну и 2.php
<?
if($_GET['mysecretkey'] != "yahahahah_you_are_fucking_hacker_lamer")
{
die(strtoupper(str_replace("_"," ","yahahahah_you_are_fucking_hacker_lamer")));
}
Рефер подделывается, запрос (пост или гет) можно тоже выбирать. Не канает.
Именно так. Рекомендация нулёвая.
Самый простой метод: сделать через сессии. При обращении к 1.php создаётся сессия, кук с её идентификатором попадает в браузер, где выполняется ajax-запрос. Вместе с этим запросом в 2.php уходит кук с айди открытой сессии. В 2.php необходимо сделать проверку на существование сессионного кука, на существование этой сессии и только тогда отдавать XML. Т.о. мы получаем _обязательную_ необходимость посещения 1.php перед тем как получить данные из 2.php.
Скажу честно, такую защиту я поломаю с помощью Curl примерно минут за 10. Но не зная методики защиты, для большинства это будет проблемой. Так что, лучше так, чем вообще никак. :)
Дальше уже можно навернуть ещё что-то сверху этого метода. Для начала, думаю, и этого хватит.
Santyago добавил 12.02.2010 в 18:24
"ключик" добавьте
2.php?mysecretkey=yahahahah_you_are_fucking_hacker_lamer
ну и 2.php
<?
if($_GET['mysecretkey'] != "yahahahah_you_are_fucking_hacker_lamer")
{
die(strtoupper(str_replace("_"," ","yahahahah_you_are_fucking_hacker_lamer")));
}
Т.е. один ключик для всех? Смотришь исходник в браузере, копируешь ключик и используешь сколько влезет?
Santyago, я так понял, что 2.php не вызывается браузером напрямую, а через 1.пхп, если неправ, то очевидно что этот метод не сканает :)
bearman добавил 12.02.2010 в 18:26
такую защиту я поломаю с помощью Curl примерно минут за 10
минута от силы.
"ключик" добавьте
2.php?mysecretkey=yahahahah_you_are_fucking_hacker_lamer
ну и 2.php
<?
if($_GET['mysecretkey'] != "yahahahah_you_are_fucking_hacker_lamer")
{
die(strtoupper(str_replace("_"," ","yahahahah_you_are_fucking_hacker_lamer")));
}
запрос отправляется от браузера... Его легко поймать... да и к тому же запрос отправляется через js... что упрощает задачу до банального просмотра исходников 1.php в браузере.
Чеширский добавил 12.02.2010 в 18:28
Santyago, я так понял, что 2.php не вызывается браузером напрямую, а через 1.пхп, если неправ, то очевидно что этот метод не сканает :)
bearman добавил 12.02.2010 в 18:26
минута от силы.
2.php вызывается через бразуер, так как вызывается средствами JS.
Человек А обращается к файлу 1.php и там во взаимодействии с интерфейсом может посредством AJAX делать запрос к 2.php и там же (в 1.php) не перегружая страницу получать результат.
видимо да, 2.пхп должен аяксом из браузера браться. тогда сессия спасет 100%. ито до использования курла =)
в общем то есть правило - "что может увидеть пользователь, невозможно защитить от скачивания/парсинга"
bearman добавил 12.02.2010 в 18:29
Чеширский, да, прошу продения, глянул на картинку а не в текст :)
по картинке думается, будто 1.php выступает в роли "прокси" между пользователем и 2.
спрячте ее)
Santyago, я так понял, что 2.php не вызывается браузером напрямую, а через 1.пхп, если неправ, то очевидно что этот метод не сканает :)
Судя по этому
$.ajax({type: "POST",
url: "2.php"+data,
dataType: "xml",
success: parseXml
});
});
Таки вызывается из браузера и задача как раз в том, чтобы запретить прямые вызовы без захода на страницу сайта. Если не прав - тоже поправьте... :)
bearman добавил 12.02.2010 в 18:26минута от силы.
Гм... А кофе заварить?.. :D