Month: March 2014

Power Shell Execution Policies in C#

Posted on Updated on

Mam aplikację która uruchamia skrypty PowerShell (*.ps1). W aktualnych windowsach są różnie polityki (wyjątkowo na stronie Microsoftu było do wystarczająco wytłumaczone about_Execution_Policies) odnośnie uruchamiania skryptów. Zdarzyło się, że pierwsza osoba, u której testowałem miała ustawienia Restricted i nie można było uruchomić plików ze skryptem.

Radą na to jest tymczasowe (w ramach danego procesu) zezewolenie na takowe skryptów uruchamianie:

private void TemporaryAllowRunningPowerShellScripts()
{
    var powerShell = PowerShell.Create();

    powerShell.AddScript("Set-ExecutionPolicy Bypass -Scope Process");

    powerShell.Invoke();
}

Podczas developowania uruchamiam wiele skryptów różnych i chciałbym znieść restrictions:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -scope CurrentUser

Poziomy logowania

Posted on Updated on

Przyklejone z wiki o log4j:

Level Description
OFF The highest possible rank and is intended to turn off logging.
FATAL Severe errors that cause premature termination. Expect these to be immediately visible on a status console.
ERROR Other runtime errors or unexpected conditions. Expect these to be immediately visible on a status console.
WARN Use of deprecated APIs, poor use of API, ‘almost’ errors, other runtime situations that are undesirable or unexpected, but not necessarily “wrong”. Expect these to be immediately visible on a status console.
INFO Interesting runtime events (startup/shutdown). Expect these to be immediately visible on a console, so be conservative and keep to a minimum.
DEBUG Detailed information on the flow through the system. Expect these to be written to logs only.
TRACE Most detailed information. Expect these to be written to logs only. Since version 1.2.12.

Http Status code 403 a dodatkowy tekst

Posted on

Mam serwis który z powodów braku dostępu danego resource dla danego użytkownika zwraca 403 (Forbidden). Standardowy przypadek dla 403. Zastanawiałem się czy nie powinienem zawrzeć dodatkowej informacji w tak zwracanym Response.
Klient “Romek” requestuje o różne pola – “Name”, “Surname”, “BirthDate”, “Salary”, itp. Romek może nie mieć dostępu do pola Salary, a mieć do pozostałych. Chodziło mi po głowie żeby dołożyć informację o tym, że tylko pole “Salary” nie może być odczytane.
Jednak nie tędy droga. Request jest pod jakiś konkretny resource. Można mieć do niego dostęp albo nie. Jeśli dwa JSON’y które sa przesyłane z requestem POST są różne (np różnią się tym “Salary”) to są to request o inny resource i raz będzie 403 a raz 200. Nie trzeba klientowi (developerowi) bardziej pomagać.

WebClient cachuje wyniki?

Posted on Updated on

Wydawało mi się to trochę niemożliwe. Jak? Gdzie? Kto określa jakieś granice ilościowe tych cachowanych materiałów?

Przeglarka jest sobie takim osobnym programem, który rzeczywiście robi cache. Patrzy na nagłówki, ocenia co gdzie jak i kiedy. Ma miejsce w pamięci gdzie to sobie przechowuje.

Ale zwykła prosta klasa w .NET która jest odpowiedzialna tylko za ściagnięcie stronki, obrazka lub tym podobnych z internetu? Zdziwiłem się.

Na SO ktoś ma nawet problem, że WebClient cache’uje choć nie tego nie chce: http://stackoverflow.com/questions/2425219/is-there-any-way-to-force-webclient-not-return-cached-data
http://stackoverflow.com/questions/3812089/c-sharp-webclient-disable-cache

Może kiedyś zglębie temat bo na szybko nie udało mi się zaobserwować cachowania.

Prezroczysta favicon

Posted on

Favicon to taka ikonka która pojawia się na zakładce (w przegldarce). Taka mała, żeby można było pokojarzyć co to za strona ale jednocześnie nie zajęła dużo miejsca.

Kroki:

  1. Szukam w google obrazka (na zakładce Grafika), ten obrazke musi być baaardzo prosty, czeka go duże zmniejszenie
  2. zapisuję obrazek
  3. convertuję do png jeśli trzeba
  4. zmniejszam rozmiar do 32×32 (ale zauważyłem że 64×64 też działa), zwykły paint sobie z tym radzi
  5. za pomoca aplikacji online dodaje transparency, np http://www.online-image-editor.com/
  6. wrzucam do głownego katalogu aplikacji webowej (ustawione Copy To Output gdy jest to Visual Studio)

(Prznajmniej w NancyFX coś takiego zadziała.)

Run as administrator (ustawić na pliku)

Posted on

Jeśli jesteśmy znudzeni klikać na każdym razem PPM i “Run As Administrator” może wymusić aby dany program zawsze się tak uruchamiał. Aktualnie mam potrzebę aby Visual Studio jak i Total Commander na jednej z wirtualek były zawsze uruchamaine z uprawnieniami administrator.
Wybieramy właściwości pliku a nastepnie zakładkę Compatibility. Na dole jest opcja Run this program as an administrator:

Run as administrator

Od teraz na pliku pojawi się charakterystyczna “tarcza”:

Run program as administrator, shield

Ants – gra w walkę na zamki

Posted on

Stara prosta gierka dla dwóch graczy. Cel – zburzyć zamek przeciwnika lub zbudować swój powyżej 100 punktów.

Na zmianę zagrywamy kartami. 3 typy surowców (cegły, broń, kryształy).

ants game victory
Mrówki po lewej ciesza się że rozwaliły zamek po prawej.

Dawno temu gdy nauczyłem się pisać komunikację po socketach w C# to zaprogramowałem sobie właśnie ta gierkę do grania po sieci.

Ściagnij

Znaleziono na Gosfish Games

Security matters (dla niektórych)

Posted on Updated on

Byłem na jednej z prezentacji grupy od Security w firmie. Jestem “raczej” świadomym większości zagrożeń i nie lubię skrótów gdzie zostawia się jakieś dziury z braku czasu. Niestety zdarzają się sytuacje, że czas (i PM) goni. Wtedy zakładamy optymistyczne scenariusze i nie słucha się developerów.

Zwykły atak DOS na maila kontaktowego naszego klienta jest możliwy. Ale przecież to się nie musi zdarzyć 😉

Anyway. Lessens learned było takie, że następnym razem można podejść do ludzi odpowiedzialnych za security i opowiedzieć jakie słabości będzie miał system przez nas pisany jeśli nie dostaniemy dodatkowych godzin. Wtedy najpewniej okaże się, że te godziny jednak się znajdą. Można porozmawiać z klientem, że takie zagrożenia mogą wystąpić i on jest teraz tego świadom. Jeśli nie chce przeznaczyć większych środków na development to musi się liczyć z ewentualnymi konsekwencjami.

Przy okazji chciałem przypomnieć termin Security through obscurity:

Security through obscurity lub security by obscurity (z ang. bezpieczeństwo poprzez niezrozumiałość) − przykład złych praktyk stosowanych w bezpieczeństwie teleinformatycznym, którego istotą jest ukrywanie detali dotyczących implementacji, formatów i protokołów przed potencjalnymi adwersarzami. Osoby stosujące tę technikę wierzą, że nawet jeśli system posiada luki, nieznajomość błędów uniemożliwia przeprowadzenie ataku. (…)

Poprawny sposób na czytanie pliku w ASP.NET

Posted on Updated on

// path to App_Data
string appData = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();

Komentarze:
– This is the most “correct” way of getting it.
– Because it’s not hardcoding the “App_Data” string. That can change in the future versions, or be different in Mono etc. etc.
Źródło: http://stackoverflow.com/questions/1268738/asp-net-mvc-find-absolute-path-to-the-app-data-folder-from-controller

Idąć dalej za linkami w z powyższego źródła trafiam na Getting The Location of App_Data Folder gdzie autor całego zamieszania pisze:

Unfortunately we cannot (or should not) use this kind of code since it is a dirty hack that relies on internal implementation of some internal classes and it also requires us to hard-code a string. So what’s the benefit? The only one is that now I’m pretty sure, that there is no way to interact with App_Data folder using BCL so I will no longer have to search for it on the Internet – thing that I have done countless times.

Może więc w związku z powyższym pozostać przy standardowym:

string path = HttpContext.Current.Server.MapPath("~/App_Data");

Znalazłem miejsce gdzie AppDomain.CurrentDomain.GetData(“DataDirectory”) ma przewagę. Korzystam mianowicie z innego hacka aby mieć jakby scheduled job Easy Background Tasks in ASP.NET, wtedy HttpContect.Current jest nullem.