Как гарантировать доступ к моему веб-сервису от моего кода только?

Вы можете использовать его следующим образом

ALTER PROCEDURE [dbo].[DailyBatchSummaryReport_NoGroup]
@FromDatePara Datetime,
@ToDatePara Datetime,
@SeleRecipe nvarchar(max),
@SeleOrder nvarchar(max),
@SeleCustomer nvarchar(max),
@SeleSite nvarchar(max),
@SeleTruck nvarchar(max),
@SeleDriver nvarchar(max),
AS
BEGIN

Передать значения @SeleOrder, @SeleCustomer как 0 для непроверенного и 1 для флажка

select * from
yourtable
where 
OrderNumber= CASE WHEN @SeleOrder = '0' THEN OrderNumber ELSE @SeleOrder END
AND
CUSTOMER= CASE WHEN @SeleCustomer = '0' THEN CUSTOMER ELSE @SeleCustomer END
AND
Driver= CASE WHEN @SeleDriver = '0' THEN Driver ELSE @SeleDriver END

Убедитесь, что значение по умолчанию передано как 0. Здесь вы выбрали тип данных как nvarchar (max), поэтому я написал «0», иначе вы можете написать 0, если вы передадите просто значение типа int. или вы можете установить значение по умолчанию как 0

 ALTER PROCEDURE [dbo].[DailyBatchSummaryReport_NoGroup]
    @FromDatePara Datetime,
    @ToDatePara Datetime,
    @SeleRecipe int  = 0,
    @SeleOrder int  = 0,
    @SeleCustomer int  = 0,
    @SeleSite int  = 0,
    @SeleTruck int  = 0,
    @SeleDriver int  = 0,
    AS
    BEGIN

выбрать логику согласно вашему удобству кодирования. но вышеуказанный метод будет работать

9
задан erotsppa 11 May 2009 в 16:01
поделиться

9 ответов

Чтобы развить идею Саймона, вы могли бы очень легко добавить строку ключа в свое приложение, а затем отправить идентификатор устройства , а затем XOR'ed DeviceID (или какой-либо другой простой алгоритм для шифрования строки) со строкой ключа.

Поскольку вы знаете значение ключа, которое нужно использовать, вам легко «расшифровать» эту строку на стороне сервера и убедитесь, что значения совпадают.

Таким образом, пароль будет отличаться для каждого устройства пользователя, и строка «ключа» никогда не будет отправлена ​​по проводам больших немытых сетей. : -)

Да, это ни в коем случае нельзя было бы понять, но, как говорили другие, идея не в том, чтобы сделать это невозможным. Идея состоит в том, чтобы доставить больше хлопот, чем оно того стоит.

вы можете очень легко иметь строку ключа в своем приложении, затем отправить идентификатор устройства, а затем XOR'ed DeviceID (или какой-либо другой простой алгоритм для шифрования строки) со строкой ключа.

Поскольку вы знаете значение ключа для использовать, вам легко «расшифровать» эту строку на стороне сервера и убедиться, что значения совпадают.

Таким образом, пароль отличается для каждого устройства пользователя, и строка «ключа» никогда не пересылается по проводам из больших немытых интернетов. : -)

Да, это ни в коем случае нельзя было бы понять, но, как говорили другие, идея не в том, чтобы сделать это невозможным. Идея состоит в том, чтобы доставить больше хлопот, чем оно того стоит.

вы можете очень легко иметь строку ключа в своем приложении, затем отправить идентификатор устройства, а затем XOR'ed DeviceID (или какой-либо другой простой алгоритм для шифрования строки) со строкой ключа.

Поскольку вы знаете значение ключа для использовать, вам легко «расшифровать» эту строку на стороне сервера и убедиться, что значения совпадают.

Таким образом, пароль отличается для каждого устройства пользователя, и строка «ключа» никогда не пересылается по проводам из больших немытых интернетов. : -)

Да, это ни в коем случае нельзя было бы понять, но, как говорили другие, идея не в том, чтобы сделать это невозможным. Идея состоит в том, чтобы доставить больше хлопот, чем оно того стоит.

Поскольку вы знаете, какое значение ключа нужно использовать, вам легко «расшифровать» эту строку на стороне сервера и убедиться, что значения совпадают.

Таким образом, пароль для каждого устройства пользователя будет разным, а Строка «ключей» никогда не пересылается по проводам больших немытых сетей. : -)

Да, это ни в коем случае нельзя было бы понять, но, как говорили другие, идея не в том, чтобы сделать это невозможным. Идея состоит в том, чтобы доставить больше хлопот, чем оно того стоит.

Поскольку вы знаете, какое значение ключа нужно использовать, вам легко «расшифровать» эту строку на стороне сервера и убедиться, что значения совпадают.

Таким образом, пароль для каждого устройства пользователя будет разным, а Строка «ключей» никогда не пересылается по проводам больших немытых сетей. : -)

Да, это ни в коем случае нельзя было бы понять, но, как говорили другие, идея не в том, чтобы сделать это невозможным. Идея состоит в том, чтобы доставить больше хлопот, чем оно того стоит.

это ни в коем случае не было бы невозможным выяснить, но, как говорили другие, идея не в том, чтобы сделать это невозможным. Идея состоит в том, чтобы доставить больше хлопот, чем оно того стоит.

это ни в коем случае не было бы невозможным выяснить, но, как говорили другие, идея не в том, чтобы сделать это невозможным. Идея состоит в том, чтобы доставить больше хлопот, чем оно того стоит.

2
ответ дан 4 December 2019 в 13:05
поделиться

Вы действительно не можете этого сделать. Ваше приложение можно разобрать, и любой секрет в двоичном файле может быть воспроизведен во вредоносном приложении.

Еще одна атака, о которой вы должны знать, - это люди, настраивающие файл hosts в место, которое они контролируют, а затем устанавливают корневой сертификат, который позволяет им чтобы предоставить подпись для этого домена. Ваше приложение отправит сообщение с секретом, и они просто смогут прочитать секрет. Таким образом они могут извлечь пароль из любой сложной системы шифрования в двоичном файле.

Большинство идей в этом потоке уязвимы для этой атаки.

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

Я бы просто не усложнил. Имейте пароль, который жестко запрограммированы в вашем приложении. Чтобы никто не смотрел ресурсы и не пробовал каждую строку, сделайте это XOR двух строк или результатом AES-дешифрования определенной фиксированной строки.

Очевидно, вы должны выполнить запрос через SSL, иначе злоумышленник может просто нюхать трафик.

Да, решительный злоумышленник обойдет эту схему, но, как и любая схема DRM, так было всегда. Уловка состоит в том, чтобы приложить слишком много усилий, чтобы оно того стоило.

так было всегда. Уловка состоит в том, чтобы приложить слишком много усилий, чтобы оно того стоило.

так было всегда. Уловка состоит в том, чтобы приложить слишком много усилий, чтобы оно того стоило.

11
ответ дан 4 December 2019 в 13:05
поделиться

Я не уверен, какую веб-технологию вы используете, но если вы используете Ruby on Rails, он использует секретный токен аутентификации во всех своих контроллерах, чтобы убедиться, что вредоносный код не доступ к деструктивным методам (через PUSH, POST или DELETE). Вам нужно будет отправить этот токен аутентификации на сервер в теле запроса, чтобы он мог выполняться. Это должно достичь того, что, я думаю, вы ищете.

Если вы не используете Ruby on Rails, этот метод аутентификации кода может быть хорошим методом исследования и реализации себя в любой технологии, которую вы используете.

Take посмотрите Руководство по безопасности Rails , в частности раздел 3.1 (Контрмеры CSRF).

0
ответ дан 4 December 2019 в 13:05
поделиться

Я бы тоже использовал протокол https с ключами на стороне клиента. Вы можете использовать один клиентский ключ для всех или вы даже можете сгенерировать разные ключи для каждого клиента и «зарегистрировать» их на своем сервере.

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

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

1
ответ дан 4 December 2019 в 13:05
поделиться

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

Однако есть исключение !!

vector имеет специальную реализацию, предназначенную для экономии места, так что каждый bool использует только один бит. Базовый массив не является непрерывным массивом bool, и арифметические операции с массивами для vector не работают, как vector .

(я полагаю, что это также возможно что это может быть верно для любой специализации вектора, так как мы всегда можем реализовать новую. Однако std :: vector - единственная, э-э, стандартная специализация, в которой простая арифметика с указателями победила »

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

1
ответ дан 4 December 2019 в 13:05
поделиться

Полагаю, вы не хотите использовать SSL? Если вы это сделаете, вы можете открыть сеанс HTTPS, а затем передать какой-то секретный ключ в запросе.

Если вы не хотите использовать SSL, ваши возможности ограничены: чтобы иметь псевдобезопасность, я предлагаю как методы аутентификации, так и авторизации, а третий - для уменьшения общий трафик:

Аутентификация: генератор в клиентском приложении, который создает секретные ключи путем объединения с файлом ключей. Ключевой файл можно обновлять время от времени для большей безопасности: допустим, вы обновляете ключевой файл один раз в неделю. Чтобы повторить заглавие: Генератор объединяет секрет приложения с файлом ключей вне приложения для генерации третьего ключа для передачи, используемого при аутентификации. После этого сервер сможет аутентифицироваться.

Авторизация: Конечно, вы также хотите заблокировать мошеннические приложения. Здесь лучше всего иметь механизм авторизации с сайтом. Не заменяйте ключевые файлы, если клиент не входит в систему. Отслеживайте ключевые файлы для пользователей. и т. д.

Снижение трафика: Если вы получаете непристойный объем трафика или подозреваете, что кто-то пытается выполнить DOS на вашем сервере, вы также можете настроить синхронизацию и сервера, и клиентов для запроса / ответа по процедурно сгенерированному URL-адресу, который может часто меняться. Бесполезно открывать / закрывать так много сеансов HTTPS, если кто-то просто заваливает вас запросами.

1
ответ дан 4 December 2019 в 13:05
поделиться

Я не разработчик Cocoa Touch, но думаю, что HTTP-аутентификацию через SSL будет легко реализовать, и, вероятно, это именно то, что вы ищете.

Все, что вам нужно сделать настраивает HTTP-аутентификацию на стороне сервера (вы не упомянули, что вы используете на стороне сервера) и создаете самозаверяющий сертификат SSL на вашем веб-сервере. Готово. :)

Расскажите нам подробнее о своей настройке, и мы сможем вам помочь.

0
ответ дан 4 December 2019 в 13:05
поделиться

Вы можете сделать что-то вроде шифрования текущего времени и IP-адреса с iPhone, а затем расшифровать их на сервере. Обратной стороной является то, что вам нужно, чтобы приложение iPhone знало «секретный» ключ, чтобы только оно могло генерировать действительные токены доступа ... и как только ключ окажется в свободном доступе, это будет только вопросом времени, когда он будет взломан, если ваш app действительно стоит затраченных усилий.

Вы можете зашифровать ответ, используя какую-нибудь случайную часть приложения, которая должна его использовать, указав расположение двоичного файла в незашифрованном бите ответа. Тогда, по крайней мере, только клиенты, имеющие доступ к вашему двоичному файлу, смогут его расшифровать ... но опять же, это вряд ли на 100% безопасно.

0
ответ дан 4 December 2019 в 13:05
поделиться

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

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

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

Итак:

//Client code:
$sequence = file_get_contents('sequence.txt');
$seed = file_get_contents('seed.txt');
$sequence++;

//Generate the $sequence-th random number
srand($seed);
for ($i = 0; $i <= $sequence; $i++) {
    $num = rand();
}
//custom fetch function
get_info($main_url . '?num=' . $num . '&id' = $my_id);

Будет сгенерирован запрос, похожий на этот:

http://webservice.com/get_info.php?num=3489347&id=3

//Server Code: (I'm used to PHP)

//Get the ID and the random number
$id = (int)$_REQUEST['id'];
$rand = (int)$_REQUEST['num'];
$stmt = $db->prepare('SELECT `sequence`, `seed` FROM `client_list` WHERE `id` = :id');
if ($stmt->execute(array(':id' => $id)) {
    list($sequence, $seed) = $stmt->fetch(PDO::FETCH_ASSOC);
}
$sequence++;

//Generate the $sequence-th random number
srand($seed);
for ($i = 0; $i <= $sequence; $i++) {
    $num = rand();
}
if ($num == $rand) {
    //Allow Access
} else {
    //Deny Access
}

Используя разные начальные числа для каждого клиента,

0
ответ дан 4 December 2019 в 13:05
поделиться
Другие вопросы по тегам:

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