Перехватчики запросов WCF: Является ли этот образец MSDN угрозой безопасности? - PullRequest
2 голосов
/ 11 ноября 2010

Если вы посмотрите на эту документацию MSDN, есть пример со следующим кодом:

// Define a change interceptor for the Products entity set.
[ChangeInterceptor("Products")]
public void OnChangeProducts(Product product, UpdateOperations operations)
{
    if (operations == UpdateOperations.Add ||
       operations == UpdateOperations.Change)
    {
        // Reject changes to discontinued products.
        if (product.Discontinued)  //<-- IS THIS BASED ON UNVERIFIED CLIENT DATA???
        {
            throw new DataServiceException(400,
                        "A discontinued product cannot be modified");
        }
    }
    else if (operations == UpdateOperations.Delete)
    {
        // Block the delete and instead set the Discontinued flag.
        throw new DataServiceException(400, 
            "Products cannot be deleted; instead set the Discontinued flag to 'true'"); 
    }
}

Посмотрите на комментарий во всех CAPS. Мой вопрос: «Зависит ли эта строка от данных, предоставленных клиентом ... и если да, что мы можем сделать, чтобы получить безопасную проверку»?

1 Ответ

1 голос
/ 11 ноября 2010

Перехватчик изменений должен получить объект ПОСЛЕ того, как к нему были применены изменения от клиента.Так что поведение зависит от провайдера.Если ваш провайдер реализует это свойство как доступное только для чтения (что обычно означает, что любые обновления к нему игнорируются), то с проверкой выше проблем нет.Я согласен, что образец может быть лучше в этом отношении, хотя.Также в зависимости от вашего провайдера, если это свойство не только для чтения, вам нужно спросить у провайдера неизменное / предыдущее значение.Способ сделать это зависит от поставщика.Поэтому, если это EF, это скорее вопрос EF, как определить исходное значение измененного свойства (экземпляр сущности будет отслеживаться в текущем источнике данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...