У меня есть приложение Silverlight, которое связывается с бэкэндом ASP.NET через WCF. У меня есть набор объектов DataContract, которые я определил и которые (по большей части) соответствуют типам, сгенерированным LINQ to SQL, с которыми работает мой сервер ASP.NET. Мой код WCF генерирует экземпляры моих объектов DataContract из типов генератора LINQ to SQL, когда мне нужно передать данные в мой клиент Silverlight.
У меня следующий вопрос:
Каковы последствия для безопасности предоставления индекса (который используется в качестве первичного ключа в базе данных) через мои объекты DataContract?
Пример таблицы (позиция) в моей базе данных имеет следующие столбцы:
- PositionIndex: int (первичный ключ)
- PositionName: строка
- PositionType: int
И соответствующий объект (более или менее) это:
public class Position
{
public int PositionIndex { get; set; }
public string PositionName { get; set; }
public int PositionTYpe { get; set; }
}
Я обеспокоен тем, что знаю, как легко перепроектировать DLL-библиотеки Silverlight с помощью Reflection - любой потенциальный злоумышленник узнает, что я даю клиенту индекс базы данных, и, поскольку они могут перепроектировать DLL-файлы Silverlight, они могут легко получить URL-адрес моих служб WCF и попытаться сломать их. Теперь я был хорош и воспользовался советом многих, кто пришел до меня, и я сделал много-много проверок на стороне ASP.NET, чтобы убедиться, что мои сервисы WCF получают легальный вклад, но я все еще обеспокоен что я делаю что-то плохое, давая потенциальным плохим парням немного, а не немного, понимание того, как устроен бэкэнд моей системы, и я достаточно долго знал, что этого более чем достаточно, чтобы решительный человек мог начать с.
Что вы, ребята, думаете?
Если я делаю что-то плохое, используя индекс в моих DataContracts, можете ли вы предложить альтернативу? Мне трудно придумать дизайн, который не предоставляет этот индекс, поскольку мне нужно, чтобы клиент Silverlight обновлял строки, уже находящиеся в моей базе данных, и наличие индекса - лучший способ, который я могу помочь сторона ASP.NET определяет, какую строку в базе данных нужно обновить.