2009-09-29 14 views
8

Jak szyfrować ciągi zapytań w aspx.net?Jak szyfrować ciągi zapytań w asp.net?

P.S. Zdaję sobie sprawę, że to nie zapewnia bezpieczeństwa. Po prostu chcę zaciemnić zagadkę.

P.P.S Chociaż zaznaczam odpowiedź CKret jako poprawną (dla pytania jako sformułowane uważam, że jest to najbardziej poprawna odpowiedź). Jednak dla siebie, zamierzam wypróbować alternatywę ChoasPandion do szyfrowania. Gdybym potrzebował więcej bezpieczeństwa, spojrzałbym na CKreta lub Iana.

+1

Dlaczego nie zaszyfrowanie oferta bezpieczeństwo ciągu kwerendy, zakładając, że to było zrobione poprawnie? – LukeH

+1

Luke, powinienem raczej powiedzieć, że nie szukam "bezpieczeństwa". Chciałem tylko uniknąć wielu ludzi, którzy koncentrują się na bezpieczeństwie. – user179700

Odpowiedz

11

blog post przez Mads Kristensen o Query String encryption.

Strzeż Jedną rzeczą: Używa PasswordDeriveBytes w metodzie Szyfrowanie. Został zastąpiony przez Rfc2898DeriveBytes. Jeśli chcesz tylko zaszyfrować ciąg zapytania, a nie każdy link na stronie, to jest w porządku. Jeśli jednak chcesz zaszyfrować każdy link, powinieneś również dodać Redaktor do zaszyfrowania tych łańcuchów zapytania.

Takie działanie będzie miało znaczny wpływ na wydajność, jeśli na Twoich stronach znajduje się wiele linków. Co chcesz zrobić, to podnieść PasswordDeriveBytes/Rfc2898DeriveBytes z metod szyfrowania/odszyfrowywania i przechowywać klucz i IV zamiast hasła i soli.

Edit:
Mam opublikował wpis na blogu na ten temat here.

+2

Dobry link. Ktokolwiek go przestrzega powinien przeczytać komentarze, aby uzyskać więcej informacji. – NotMe

2

Nie zawracaj sobie głowy szyfrowaniem. Po prostu przekonwertuj go na ciąg podstawowy 64.

string encoded = Convert.ToBase64String(Encoding.Unicode.GetBytes(myQueryStringValue)); 
+2

Należy pamiętać, że to rozwiązanie nie zapewnia bezpieczeństwa - tylko zaciemnianie. (Bezpieczeństwo przez zaciemnienie nie jest). Jednak w przypadku OP wygląda na to, że interesuje go raczej zaciemnianie, a nie bezpieczeństwo, więc byłoby to prawdopodobnie dobre rozwiązanie, pod warunkiem, że UrlEncode powróci do łańcucha znaków. –

+1

Dlatego wysłałem tę odpowiedź. Jeśli naprawdę potrzebuje bezpieczeństwa, będzie to słaba odpowiedź. – ChaosPandion

1

Jeśli stara się ukryć swój produkt Id i rzeczy tak, to dlaczego nie wystarczy użyć Encryption?

Domyślam się, co chcesz zrobić, to zatrzymać ludzi edytujących ciąg zapytania w celu uzyskania różnych wyników. Prostym sposobem, aby to zrobić, jest dodanie skrótu do łańcucha zapytań i posiadanie pewnej funkcjonalności strony bazowej, aby sprawdzić, czy hasz jest poprawny dla żądania, identyfikując sfałszowane ciągi zapytań.

Zobacz Prevent query string manipulation by adding a hash?

+0

Hashing różni się od szyfrowania. – Nayef