Как принять только локальный ajax Call [duplicate]

Типы ссылок по умолчанию равны null, чтобы указать, что они не ссылаются на какой-либо объект. Следовательно, если вы попытаетесь получить доступ к объекту, на который ссылаетесь, а его нет, вы получите исключение NullReferenceException.

Для Ex:

SqlConnection connection = null;
connection.Open();

Когда вы запускаете это кода, вы получите:

System.NullReferenceException: Object reference not set to an instance of an object.

Вы можете избежать этой ошибки, например, следующим образом:

if (connection != null){
    connection.Open();
}

Примечание. Чтобы избежать этой ошибки, вы всегда должны инициализировать свои объекты прежде чем пытаться что-либо сделать с ними.

6
задан Yossi 6 May 2010 в 22:09
поделиться

6 ответов

JavaScript, запущенный на другом сайте, не сможет получить доступ к вашему сайту из-за политики одинакового происхождения для XHR . Но ничто не мешает кому-либо создавать скрипт PHP + CURL для «прокси» данных из вашего ajax, чтобы он выглядел так, как будто он работал на своем сервере. Попытка черных списков клиентов беспорядочна, ip-адрес дешевый и бесплатный HTTP-прокси в изобилии.

Короче, нет ничего особенного в вашем javascript. Клиент может делать все, что захочет, и вы не можете заставить его вести себя, это основа «доверия к клиентскому сайту». Хакер может использовать что-то вроде tamperdata или даже firebug для идентификации HTTP-запросов, и он сможет воспроизвести их или подделать их с помощью CURL.

Вы можете попробовать обфускать ваш javascript. Но в конце концов злоумышленник просто собирается перепрограммировать HTTP-запрос, и есть абсолютно то, что вы можете с этим поделать.

1
ответ дан rook 1 September 2018 в 05:48
поделиться

Как и в ответе @ ZZ-coder, но вы можете сделать это с помощью файлов cookie.

1) Установить cookie на сервере (хеш «ip-address + secret»), непостоянный cookie, который длится только 1 сеанс, после входа пользователя в систему.

2) Проверяйте файл cookie на сервере во время запросов AJAX (поскольку файлы cookie также отправляются с запросами AJAX)

Это похоже на ответ @ ZZ-кодера, но вы можете полностью пропустить часть JS.

0
ответ дан Alex 1 September 2018 в 05:48
поделиться

Существует множество опций, зависящих от того, какова ваша основная потребность, независимо от того, будет ли она услугой, с которой вы будете получать доступ другим, а также только с чем-то внутренним. Вот статья с некоторым подробным объяснением вариантов.

http://java.sun.com/developer/technicalArticles/J2EE/usingapikeys/

-2
ответ дан fafnirbcrow 1 September 2018 в 05:48
поделиться

Это невозможно сделать, если указано выше, вам нужно будет перепроектировать и реализовать какую-то схему аутентификации, но даже это можно эмулировать. Короткий ответ заключается в том, что если веб-браузер может получить к нему доступ, все может получить к нему доступ, если оно притворяется браузером.

Есть вещи, которые вы могли бы сделать, чтобы сделать его труднее для кого-то, например, проверить HTTP заголовки, такие как Referer и User-Agent, и выполнение проверки сеанса в вызовах AJAX.

2
ответ дан kb. 1 September 2018 в 05:48
поделиться

Увы, это невозможно. Все, что может сделать Javascript, «злоумышленник» может также делать со своего сервера. Вы можете сделать это более трудным, запутывая javascript и протокол, делая его более трудным нюхать. Существуют различные бесплатные и несвободные javacript obfuscators (также известные как «минимизация»). Обфускация протокола, который вы можете сделать, путем внедрения простой схемы шифрования (что делает ее более продвинутой, не поможет, так как ключ всегда должен быть встроен в ваш код) для отправленных и полученных данных.

0
ответ дан wump 1 September 2018 в 05:48
поделиться

Это то, что я делаю,

  1. На вашем веб-сайте создайте секретную строку. Я использую HMAC (ключ $ _ SERVER ['REMOTE_ADDR'].
  2. Запиши секрет в Javascript var.
  3. В вызове AJAX передайте эту строку в качестве параметра.
  4. На сервере AJAX снова сделайте хэш.

EDIT: примеры кода,

На вашем веб-сайте вы делаете это,

$key = 'supersecretkey'; // This is your security, don't expose this
$nonce = rand();
$timestamp = time();
$signature = hash_hmac('sha1', $_SERVER['REMOTE_ADDR'] . $nonce . $timestamp, $key);

Распечатайте vars на странице,

<script type="text/javascript">
<?php
echo "  var signature = '" . $signature . "';\n";
echo "  var nonce = '" . $nonce . "';\n";   
echo "  var timestamp = '" . $timestamp . "';\n";
?>
</script>

Когда вы совершаете вызов AJAX, передайте 3 параметра на сервер,

  http://example.com?signature=...&nonce=...&timestamp=...

На сервере AJAX , повторите вычисление,

$key = 'supersecretkey'; // This is your security, don't expose this
$nonce = $_REQUEST['nonce'];
$timestamp = $_REQUEST['timestamp'];
$signature = hash_hmac('sha1', $_SERVER['REMOTE_ADDR'] . $nonce . $timestamp, $key);

if ($signature == $_REQUEST['signature'])
   // the call if from my page.

Вы также можете отметить временную метку для валюты и nonce для повтора (требуется сеанс или хранилище данных).

8
ответ дан ZZ Coder 1 September 2018 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: