web api Sicherheit

Web api oder Sicherheit? Daten Klau leicht gemacht! Bei einem recht Bekannten online Singlebörsen, lassen sich sämtliche Daten eines Users inklusive Profil Bild heraus ziehen und das ohne Angemeldet zu sein. Wie kann so etwas passieren? Ganz einfach der Entwickler hat schlicht und einfach vergessen zu überprüfen von wem der api request kommt. Dabei ist es so einfach! Beispiel PHP:

Hier muss einfach überprüft werden ob zum eine Session variable gesetzt ist.

 

<?php
session_start();

if{!empty($_SESSION['sessionVariable']) &&  $_SESSION['sessionVariable'] === true){

//do some api stuff

}else{
	echo "Zugriff verweigert";
}
?>

 

Wie man sieht nicht besonders schwierig.

Noch leichter geht es mit ASP.net

 

 

public class ApiRequest : ApiController 
    {
	 		[Authorize]
        	public returnTYP Get()
        	{
            //do some api stuff and retrun it
        	}
    }

 

 

Hier muss lediglich das [Authorize] Attribut gesetzt werden.

 

Doch wen es so einfach ist wie kann es dann sein das solche Fehler immer wieder auftauchen? Die Antwort darauf ist ganz einfach. Schlampige Programmierer und/oder schlechte Kommunikation innerhalb des Entwickler Teams .


C# Extention Methodes

Oft kommt man beim programieren an einem Punkt an an dem na denkt “Diese Methode wäre jetzt super!!!”  Ist doch kein Problem einfach eine neue klasse und von der alten erben und diese Methode hinzufügen. Schön und gut aber was ist wen die Basisklasse sealed ist? Hier kommen Extention Methodes ins Spiel.

 

 public static class StringExtentions
    {
      //reverses the string... pretty obvious really
        public static string Reverse(this string input)
        {
            char[] chars = input.ToCharArray();
            Array.Reverse(chars);
            return new String(chars);
        }

        // "a string".IsNullOrEmpty() beats string.IsNullOrEmpty("a string")
        public static bool IsNullOrEmpty(this string theString)
        {
            return string.IsNullOrEmpty(theString);
        }

        //not so sure about this one -
        //"a string {0}".Format("blah") vs string.Format("a string {0}", "blah")
        public static string With(this string format, params object[] args)
        {
            return string.Format(format, args);
        }

    }

 

Extention Methodes lassen sich jedoch nicht nur einfach einzelne bestimme Klassen anwenden. Man kann sie zu Beispiel auch so schreiben das sie Generisch sind. Hier zum Beispiel auf alle Objekte die das interface IComparable implementieren.

 

    public static class Extentions
    {
        public static T ConvertTo<T>(this IConvertible value)
        {
            return (T)Convert.ChangeType(value, typeof(T));
        }

        public static bool IsBetween<T>(this T value, T low, T high) where T : IComparable<T>
        {
            return value.CompareTo(low) >= 0 && value.CompareTo(high) <= 0;
        }

        public static bool IsGreater<T>(this T value, T then) where T : IComparable<T>
        {
            return value.CompareTo(then) >= 0;
        }

        public static bool IsLower<T>(this T value, T then) where T : IComparable<T>
        {
            return value.CompareTo(then) <= 0;
        }
    }

 

Damit sind sie ein sehr mächtiges Tool und erleichtern einem die Arbeit oftmals.