Social CRM na Facebook, czyli fejsbukowa masakra z ochroną danych – wszystkie zdjęcia dostępne bez logowania

Mam nadzieję, że to będzie post który trochę poruszy wszystkich facebook’owców. Ostatnio w ramach Social CRM patrzyłem sobie co da się śledzić na facebook’u. U znajomych, u nieznajomych, u klientów, u partnerów itd. Zaciekawiła mnie jedna rzecz – mechanizmy ochrony i uprawnień do zdjęć. Wszystko wygląda pięknie i fajnie. Dla naiwnych. Mechanizm php’owy w facebook’u rzeczywiście chroni użytkownika przed oglądaniem jego zdjęć. Przez facebook. Kiedy facebook wie, kim jesteś i czy masz prawa oglądać te zdjęcia. Ale faebook nie chroni Cię przed oglądaniem Twoich nawet najbardziej ukrytych zdjęć i filmów, kiedy… atakujący nie jest zalogowany do facebook’a i ogląda je po prostu za pomocą URL’a.

Przepis jest prosty – facebook wszystkie zdjęcia trzyma na zewnętrznym CDN’ie (Content Delivery Network). To jest w miarę jasne dla kogoś, kto trochę „kuma” internet. Co za tym idzie i jak można się domyślać – zewnętrzny CDN i dostawca miejsca ma gdzieś uprawienia facebook’a. To z kolei oznacza, że wyświetli każde zdjęcie, które chcesz obejrzeć, jeśli znasz link. Nas sposobem generowania i domyślania się linków nie będę się tu rozwodził. Ważne, że się da. W tym poście pokaże, jak klikając można sobie pooglądać czyjeś „prywatne i zabezpieczone” zdjęcia, albo je przesłać innym.
TEN POST MA CEL TYLKO INFORMACYJNY I NIE PONOSZĘ ODPOWIEDZIALNOŚCI ZA WYKORZYSTANIE PONIŻSZYCH INSTRUKCJI W ZŁYCH CELACH

Jak obejrzeć zabezpieczone zdjęcia ludzi, których Ty nie znasz, ale zna ich jakiś Twój znajomy?

  1. Poproś go, żeby wszedł na dowolne zdjęcie i kliknął „Właściwości”. Stamtąd niech skopiuje link do CDN’a, np. http://a5.sphotos.ak.fbcdn.net/hphotos-ak-snc6/162865_179294582101401_100000625804864_454470_2715330_n.jpg – to akurat moje zdjęcie z jakieś maszyny do gry
  2. Wejdź na ten link nawet bez logowania się do facebook’a – widzisz zdjęcia mimo, że nie masz do nich uprawnień. Już nie wspomnę, że nie jesteś moim znajomym pewnie 😉

Lepszy trick – jak oglądać zdjęcia osób, których nie znasz

  1. Zaproś dowolną osobę do znajomych i nie czekaj nawet aż zaakceptuje – wg facebook’a już jesteście znajomymi
  2. Wejdź sobie na dowolne jego zdjęcie i zobacz pod jakim linkiem jest trzymane na zewnętrznym CDN’ie. Poszperaj sam/a z URL’em – masz dostęp do wszystkich zdjęć tej osoby
  3. Teraz wyślij te linki znajomym – wszycy mogą be logowania oglądać „zabezpieczone” zdjęcia :).

Nie chcę się rozwodzić, jaki to syf i co może powodować taki totalny brak zabezpieczenia, ale łatwo sobie wyobrazić swoje „prywatne i zabezpieczone” zdjęcia na swoich portalach innych niż facebook, albo w reklamach. Ja odpadam.
Ja po znalezieniu w ten weekend tego hack’a rezygnuję ze zdjęć na fb. Nawet tych tylko dla znajomych :). Nie spodziewałem się, że tak słabo to działa. Social CRM w wykonaniu facebook’a jest niestety złym rozwiązaniem. Nie ma nic wspólnego z „Social”, którego się spodziewamy, opartym o relacje i powiązania. Wszystkie dane można po prostu wyciągnąć po linku, bez relacji. I bez zalogowania :).

Reklamy

Błąd „Object reference not set to an instance of an object”

Błąd „Object reference not set to an instance of an object” może pojawiać się w wielu kontekstach w przypadku pisanych przez nas plug-in’ów. Wtedy jednak możemy sami poprawić napisany przez siebie kod. Niestety… błąd ten pojawia się również w plug-in’ie napisanym przez Microsoft, który jest częścią normalnego „execution flow” w szczególnych przypadkach.
Jeśli podczas zapisywania rekordu macie błąd „Object reference not set to an instance of an object„, a w pliku śledzenia (trace) znajdziecie następujące fragmenty:

AssemblyName: Microsoft.Crm.ObjectModel.MultiCurrencyPlugin, Microsoft.Crm.ObjectModel
i
Microsoft.Crm.Sdk.InvalidPluginExecutionException: Object reference not set to an instance of an object.

…to padliście ofiarą nienaprawionego do tej pory przez Microsoft błędu. Błąd ten pojawia się, kiedy utworzycie jakiekolwiek pole typu money na dowolnym obiekcie. CRM automatycznie dodaje wtedy atrybut systemowy exchangerate i od tej pory dołącza do obiektu plugin przeliczający wartość z pola walutowego do waluty bazowej.
Problem zaczyna się, kiedy usunięte zostanie pole walutowe i w obiekcie nie ma już pól typu money. CRM zapomina bowiem… odrejestrować plug-in’a i nie usuwa atrybutu exchangerate, a nadal próbuje liczyć wartość w walucie bazowej, oczekując wartości z chociaż jednego pola walutowego. I… NullPointerException gotowy :).

Rozwiązanie:
W obiekcie, na którym pojawia się ten błąd, dodajcie jakiekolwiek pole typu money. Pole nie musi być widoczne na formatce, ważne, żeby było atrybutem tego obiektu.

Zmiana maksymalnej liczby zakładek na formularzu

Czy próbowaliście kiedyś dodać wiele zakładek do dowolnej formatki w Microsoft Dynamics CRM 4.0? Zdawaliście egzamin „Applications”? Jeśli padło choć raz TAK, to wiecie, że Dynamics CRM nakłada na nas ograniczenia na liczbę zakładek na formatkach. Maksymalna liczba zakładek to 8. Co zrobić jeśli potrzebujesz więcej zakładek? Oficjalnie nic. Ale od czego są nieoficjalne zmiany? 🙂
Pomijając user experience takiej formatki, możesz zwiększyć maksymalną liczbę zakładek na formatce powyżej 8. W tym celu trzeba dokonać zmiany w pliku odpowiedzialnym za ustawienia edyora formatek:

  1. Na serwerze, gdzie zainstalowany jest Dynamics CRM, wchodzimy do katalogu zawierającego pliki stron (C:\inetpub\wwwroot, C:\Microsoft Dynamics CRM\CRMWeb albo inny katalog, do którego zainstalowaliście strony)
  2. Wchodzimy do katalogu Tools
  3. Wchodzimy do katalogu FormEditor
  4. Edytujemy plik FormEditor.aspx i znajdujemy w nim linijkę:
    var _iMaxTabs = 8;
  5. Zmieniamy na większą liczbę i zapisujemy plik
  6. Restartujemy IIS’a i mamy nową funkcjonalność CRM’a 🙂

Uważajcie tylko z tymi zakładkami, bo… w CRM 5 nie będzie ich w ogóle! Lepiej więc nie przyzwyczajać klientów…
PS. Nie muszę chyba dodawać, że zmiana jest niewspierana i jako taka może być usunięta przez Microsoft w którymś Rollup’ie?

Problem z Blank.aspx i Dynamics CRM 4.0

Wiele osób ma ostatnio problem z dziwnym zachowaniem CRM’a, mianowicie próbą „zachowania” pliku Blank.aspx. Gdzieś na blogach ignoranci zaczęli nawet szerzyć bzdurę, że to błąd Dynamics CRM 4.0 powoduje takie zachowanie. Wszystko wygląda tak:

Dynamics CRM 4.0 Blank.aspx

PRZYCZYNA PROBLEMU:
Takie zachowanie spowodowane jest faktem, że Internet Explorer utracił znaczenie powiązania z plikami typu aspx lub inaczej – Internet Explorer nie wie, co zrobić z plikiem takiego typu. Dlaczego? Wszystkiemu winna jest poprawka do IE, którą większość użytkowników zainstalowało z Windows Update (KB953838 dostępna tutaj).

ROZWIĄZANIE PROBLEMU:
Najprostsze rozwiązanie to przywrócić IE wiedzę jak interpretować pliki aspx :). W tym celu w okienku, które się pojawia („Czy chcesz zapisać plik Blank.aspx?”) wybieramy „OK” i zapisujemy w jakimś łatwo dostępnym miejscu. Później otwieramy plik prawym guzikiem i wybieramy „Otwórz za pomocą…”. W okienku, które się pojawi wybieramy Internet Explorer i zaznaczamy, żeby IE zawsze otwierał pliki aspx:

Dynamics CRM 4.0 Blank.aspx - Otworz

Problem rozwiązany.

Błąd „Precision must be an integer within the allowed range: 0 for integers, 0 to 4 for money, 0 to 10 for decimal, and 0 to 5 for float fields”

Ostatnio na forum CRM pojawiło się pytanie co w Dynamics CRM znaczy błąd „Precision must be an integer within the allowed range: 0 for integers, 0 to 4 for money, 0 to 10 for decimal, and 0 to 5 for float fields” podczas oglądania w CRM szans sprzedaży, ofert lub produktów na szansach sprzedaży i ofertach. Jeśli też trafiłaś/eś na taki błąd i nigdzie nie możesz znaleźć o co chodzi (google wiele na ten temat nie mówi poza linkami do pytań pozostawionych bez odpowiedzi…), odpowiedź znajdziesz poniżej. A Maciek dostał odpowiedż już wcześniej tutaj: http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/8e02cea2-bef8-45d8-b67a-6cb360ad8f2c :).

Otóż, ten błąd nie wynika wcale z tego, że któreś pole ma źle ustawioną precyzję. Wynika raczej z faktu, że produkt, który został dodany do oferty lub szansy sprzedaży nie jest obecny w cenniku wykorzystanym przez tę szansę sprzedaży/ofertę. Rozwiązaniem jest dodanie produktu do cennika, który jest użyty w danej szansie lub ofercie. I już. Tyle 🙂

Błąd: „Method not found: Single Microsoft.Crm.Sdk.CrmFloat.get_Value()”

Ostatnio potrzebowałem użyć bardzo fajnego narzędzia dostępnego na CodePlex’ie, tzn. CRM 4.0 Bulk Data Export Tool (aplikacja wraz z kodem dostępna jest tu: http://www.codeplex.com/mscrmbulkdataexport, a jej krótki opis w tym poście: ). Niestety każda próba exportu danych kończy się błędem „Method not found: Single Microsoft.Crm.Sdk.CrmFloat.get_Value()”. Zainteresowałem się trochę bardziej tym błędem. W skrócie mówi on o tym, że nie znalazł metody get_Value() w klasie CrmFloat. W reflektorze widać jednak, że ta metoda jest obecna. O co więc chodzi?

Ano, o dość prostą rzecz… Sygnatura metody pokazuje, że metoda zwraca typ „Single”. A to nieprawda od niedawna :). Bo CrmFloat zwraca w CRM 4.0 typ „Double”. I tyle :). Dlatego błąd twierdzi, że nie ma metody get_Value(), która zwraca rezultat typu Single. I ma rację! Bo zwraca Double :).

Jak więc poradzić sobie z tym błędem w CRM 4.0 Bulk Data Export Tool’u? Wystarczy, że podmienimy programikowi używaną bibliotekę Microsoft.Crm.Sdk.dll na jej najnowszą wersję i przekompilujemy aplikację. Poniżej kroki, jak tego dokonać:

1. Ściągamy źródła CRM 4.0 Bulk Data Export Tool stąd: http://www.codeplex.com/mscrmbulkdataexport/Release/ProjectReleases.aspx?ReleaseId=12682

2. Ściągamy najnowsze CRM 4.0 SDK stąd: http://www.microsoft.com/downloads/details.aspx?FamilyID=82E632A7-FAF9-41E0-8EC1-A2662AAE9DFB&displaylang=en

2. Otwieramy projekt „CrmDataExport.sln” w Visual Studio.

3. Z referencji „wyrzucamy” Microsoft.Crm.Sdk i Microsoft.Crm.Sdk.TypeProxy:

4. Dodajemy referencje do najnowszych wersji tych bibliotek. W tym celu klikamy „Add reference” i w okienku w zakładce „Browse” idziemy do folderu z SDK. Z katalogu bin, wybieramy te dwie potrzebne biblioteki: 

5. Kompilujemy projekt (w menu „Build” -> „Build solution”

6. Uruchamiamy programik i wszystko działa! 🙂 Można eksportować dowolne rekordy z naszego CRM’a.

Jak odinstalować IE8 Beta 2… kiedy sposoby ze stron zawodzą

Jak zwykle ciekawość skusiła mnie dziś do eksperymentu z IE8 Beta 2 :). Ściągnąłem i przekonałem się, że rzeczywiście IE8 to spory krok do przodu (czyt. pojawiły się funkcje znane w Operze i Firefox’ie). Przeglądarka działa dużo szybciej, lepiej obsługuje CSS’y i ma sporo „bajerów”, które jeszcze nie raz będą reklamowane. Więc nie o tym będzie ten post… Będzie o tym, jak odinstalować IE8 Beta 2.
Spędziłem sporo czasu, żeby znaleźć sposób deinstalacji. Nie ma po prostu „uninstall IE8”. Jak się okazuje są 2 drogi pozbycia się Bety 2 z systemu. Od razu napiszę, że ta pierwsza „podstawowa”, o której piszą prawie wszyscy, nie działa na wszystkich maszynach – mi nie zadziałała na żadnym komputerze 😉

SPOSÓB 1 (popularny, niedziałający na 3 maszynach):

1. Wchodzimy do „Panelu sterowania”
2. Otwieramy „Programy i funkcje”
3. W zadaniach Wybieramy „Wyświetl zainstalowane aktualizacje”

4. Na liście znajdujemy Internet Explorer 8 i spokojnie klikamy „Odinstaluj”

SPOSÓB 2 (mniej popularny, ale działający):

1. Jeśli na liście aktualizacji nie ma Internet Explorer 8, to deinstalacja zaczyna się robić trudniejsza
2. Musimy za pomocą managera pakietów odinstalować pakiety instalacyjne IE8. W przypadku Visty, system przywróci nam po prostu IE7. Pakiety instalacyjne znajdują się w katalogu z Windows (u mnie C:\WINDOWS) w folderze „servicing\Packages”
3. Aby odinstalować pakiety za pomocą Managera Pakietów, musimy w linii poleceń wpisać:

FORFILES /P C:\WINDOWS\servicing\Packages /M Microsoft-Windows-InternetExplorer-8*.mum /c „cmd /c start /w pkgmgr /up:@fname /norestart”

Ostatni przełącznik „/norestart” jest opcjonalny, ale bez niego system będzie chciał się zrestartować po usunięciu pakietów. Ukończenie deinstalacji odbędzie się dopiero przy restarcie systemu.

PS. Nie odinstalowałem IE8 Beta 2 dlatego, że jest zły! Póki co nie działają niestety wszystkie add-on’y, których używam w codziennej pracy i dlatego ciągle wolę „siódemkę”. Ale IE8 zapowiada się naprawdę super!