Montag, 27. Juli 2020

ASP.net WebForms und "Googles" ReCaptcha

Nach verschiedenen Ausflügen in andere Bereiche meines Berufes (Desktop-, Mobile, IoT und reine HTML-Entwicklung) bin ich wieder bei einem Lieblinge angekommen den WebForms in ASP.net. Dort habe ich schon verschiedentlich "Captchas" eingebaut, auch das "ReCaptcha" von "Google", allerdings die Version 1.0, die nicht mehr unterstütz wird. Da gab es eine kleine DLL, die einem die meiste Arbeit abnahm, auf die wollte und konnte ich mich jetzt nicht verlassen.

Also habe ich ein wenig herumgesucht und bin, wie zumeist, bei "Stackoverflow" fündig geworden. Wie immer mußte man verschiedene Lösungsansätze zusammenbringen, um ein Ergebnis zu erzielen. Da es diesbezüglich Interesse zu geben scheint, will ich meinen Ansatz hier veröffentlichen.


Zunächst bauen wir den Zugriff auf die "Google-API" in den "Header" in der "Master.aspx" oder, wenn Ihr ohne "Master" arbeitet, in den Header der ".aspx"-Page ein, wo das "ReCaptcha" erscheinen soll:
Ich habe das so gelöst, daß ich in der "Master" einen "Content-Bereich für "JavaScript" in den Header geschrieben habe, benötige ich jetzt auf einer Seite spezielles "JavaScript", dann kann ich das auf den Pages bequem im Content plazieren. Dort kommt z.B. auch der HTML-Editor für die User rein, den benötige ich ja auch nicht auf allen Seiten.
Das sieht dann so aus:

Master.aspx

(...)
<html lang="en">
<head runat="server">
(...)
    <asp:ContentPlaceHolder ID="ScriptContent" runat="server">
    </asp:ContentPlaceHolder>
(...)
</head>
(...)


bei mir ist das die "Contact.aspx", da kommt rein:

(...)
<asp:Content ID="Content0" ContentPlaceHolderID="ScriptContent" runat="server">
(...)
    <script type="text/javascript" src="https://www.google.com/recaptcha/api.js" async            defer></script>
</asp:Content>
(...)


Ansonsten baut den Teil irgendwie in den "Header" ein:
<script type="text/javascript" src="https://www.google.com/recaptcha/api.js" async defer></script>

und anschließend den DIV-Tag, wo das ReCptcha-Widget gerendert werden soll:

<div id="dvCaptcha" class="g-recaptcha" data-sitekey="<%: ReCaptcha_Key %>"></div>


Den "ReCaptcha_Key" machen wir uns im Quellcode zugänglich (ich arbeite ausschließlich mit C#. solltet Ihr VB oder etwas ähnliches verwenden, müßt Ihr das leicht anpassen).

Bei mir heißt dann die "CodeBehind": Contact.aspx.cs und die startet mit:

{
    public partial class Contact : Page
    {
        (...)
        protected static string ReCaptcha_Key = "<RECaptcha Site Key>";

        protected static string ReCaptcha_Secret = "<RECaptcha Secret Key>";
(...)


Diese Declaration macht die Variabeln für das "ReCaptch" pagewide verfügbar und wir konnten den "ReCaptcha_Key" auf der "aspx" einfügen.

Jetzt müssen wir unserem "ReCaptcha" Leben einhauchen (Funktionalität geben), sonst sieht es zwar schön aus, wird aber keinen Einfluß auf die Validierung unseres Formulars haben. Da ich grundsätzlich alle Daten validiere, habe ich diese Funktion einfach um einen Methodeaufruf erweitert:

        protected void btnSendMessage_Click(object sender, EventArgs e)
        {
(...)
            try
            {
(...)
                if (!IsValidCaptcha()) throw new ValidationException("The ReCaptcha is wrong!");
(...)
            catch (Exception ex)
            {
                lblResult.Text = ex.Message;
                lblResult.ForeColor = System.Drawing.Color.Red;
            }
        }


Jetzt müssen wir nur noch das "ReCaptcha" validieren lassen:

        public bool IsValidCaptcha()
        {
            string resp = Request["g-recaptcha-response"];
            string quest = string.Format("https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}", ReCaptcha_Secret, resp);
            var req = (HttpWebRequest)WebRequest.Create
                      (quest);
            using (WebResponse wResponse = req.GetResponse())
            {
                using (StreamReader readStream = new StreamReader(wResponse.GetResponseStream()))
                {
                    string jsonResponse = readStream.ReadToEnd();
                    JavaScriptSerializer js = new JavaScriptSerializer();
                    // Deserialize Json
                    CaptchaResult data = js.Deserialize<CaptchaResult>(jsonResponse);
                    if (Convert.ToBoolean(data.success))
                    {
                        return true;
                    }
                }
            }
            return false;
        }
        public class CaptchaResult
        {
            public string success { get; set; }
        }


Da es jetzt haufenweise Fehlermeldungen hagelt, fügt bitte an entsprechender Stelle noch die "Using-Anweisungen" ein:

using System.Net;
using System.IO;
using System.Web.Script.Serialization;
using System.ComponentModel.DataAnnotations;


Hier noch einige Links, die Ihr ggf. brauchen könnt.

ReCaptcha Homepage: https://www.google.com/recaptcha/intro/v3.html

Falls Du schon einen Account bei Google hast, kommst Du hier zur richtigen Admin-Console:
https://www.google.com/recaptcha/admin/site/xxxxxxx

Und hier habe ich die Lösung ursprünglich gefunden:
https://stackoverflow.com/questions/27764692/validating-recaptcha-2-no-captcha-recaptcha-in-asp-nets-server-side

und ein herzliches Danke schön an Tabish Usman.





Samstag, 19. Mai 2018

wjk-Security Suite®: EU-Datenschutz-Grundverordnung (DS-GVO)

wjk-Security Suite®: EU-Datenschutz-Grundverordnung (DS-GVO):

Ab 25. Mai 2018 müssen datenverarbeitende Unternehmen in der EU die Vorgaben der EU-Datenschutz-Grundverordnung (2016/679) beachten. Viele Unternehmen, Vereine und Web-Seitenbetreiber sind darauf nicht vorbereitet. So werden sich einmal mehr die "Abmahnhaie" die Taschen füllen können...

Samstag, 10. März 2018

wjk-Security Suite®: DDoS-Attacken

wjk-Security Suite®: DDoS-Attacken: Für Web-Seiten-Betreiber und deren Serviceunternehmen , zu denen wir uns zählen, ist es ein Crux: DDoS-Attacken . Auf den Servern unser...

Wieder zurück!

Guten Tag,
liebe Leserinnen, liebe Leser,

zunächst bedanke ich mich bei allen, die mir geschrieben haben und immer wieder nachgefragt haben, warum ich mich nicht zu Wort melde und ob es mir gut ginge.

Nun, Tatsache ist und war, daß ich im Rahmen meines beruflichen Aufenthalts in Sofia, Bulgarien, eine Retinaablösung erlitt und nur aufgrund der hervorragenden Behandlung meiner dortigen Ärzte nicht auf diesem Auge erblindete,
So habe ich es mit bitterer Einsicht aufgenommen, daß diese Ärzte mir dringend empfahlen, vorerst nicht am Computer zu arbeiten (mindestens für sechs Monate).

Tief enttäuscht über meine Hilflosigkeit bin ich nach Hause, Thailand, zurückgekehrt.

Genau gegen Ende der sechs Monate, die ich das Auge schonen sollte, traf mich der nächste Schicksalsschlag: Das bis dahin gesunde Auge entzündete sich so massiv, daß mich meine hiesigen Ärzte sofort ins Krankenhaus einwiesen. Ihrer hervorragenden Arbeit verdanke ich meine jetzige Genesung!

So muß ich das Jahr 2017, auch wegen anderer misslicher Umstände, wohl oder übel am besten abschreiben...
Ich möchte jetzt meine geliebte Tätigkeit als Journalist und Blogger wieder aufnehmen, wenn auch nicht ganz so intensiv wie vor den Rückschlägen, die mich ereilten.



Ich bedanke mich bei allen, die mir in dieser schweren Zeit beigestanden sind und denen die mir halfen!

Freitag, 13. Januar 2017

News: China-Handys aus dem Internet

Smartphone-Schnäppchen im c’t-Test

Hannover, 05. Januar 2017 – High-End-Smartphones sind schick, aber auch sehr teuer. Überraschend günstige Konkurrenz zu Apple, Samsung und Co, findet man allerdings in China: Für deutlich unter 200 Euro sind Full-HD-Display, Fingerabdruckscanner, USB-C-Anschluss und ein üppiger Speicher zu haben. Doch der Import nach Deutschland birgt so einige Tücken und nicht jedes vermeintliche Schnäppchen ist auch für deutschsprachige Nutzer alltagstauglich, schreibt das Computermagazin c’t in seiner aktuellen Ausgabe 2/17.

Günstige Smartphones von chinesischen Herstellern wie XiaomiMeizu oder LeEco sind schon längst nicht mehr nur billige Kopien bekannter Markenmodelle. „Da die Smartphone-Entwicklung und Fertigung ohnehin zum großen Teil in China stattfindet, ist das Know-how dort vorhanden“, erklärt c’t-Redakteur Alexander Spier. „Firmen, die früher nur Smartphones für andere Marken hergestellt haben, bieten inzwischen ähnliche Produkte unter eigenem Namen an.“ Somit gebe es in Sachen Verarbeitung und Display selten böse Überraschungen, weil alle auf ähnliche Bauteile zurückgreifen.

Abstriche muss man jedoch bei der Software hinnehmen. Google-Apps und der Play Store fehlen auf China-Handys fast immer, da China diese Dienste blockiert. Die vorinstallierten Andoid-Varianten lösten bei Spier eine gewisse Skepsis aus: „Die Geräte kommen häufig mit allerhand Zusatzsoftware, die sich umfangreiche Rechte einräumen und teils obskure Nutzungsbedingungen anzeigen. Sicherheitslücken und Spionagefunktionen lassen sich nicht völlig ausschließen.“ Auch bei den LTE-Frequenzen muss man aufpassen, da nicht jedes Handy das in Deutschland wichtige LTE-Band 20 unterstützt.

Der Kauf eines Smartphones aus China ist und bleibt mit Risiken verbunden. Beim Direktversand versuchen die Händler teilweise die Steuer zu umgehen und deklarieren niedrigere Preise, in der Hoffnung, dass der Zoll das Paket ignoriert. Beim Kauf über einen Händler mit Sitz in der EU erspart man sich diese Probleme, zahlt allerdings auch meist etwas mehr. „Wer bereit ist, Abstriche in Sachen Kundenservice zu machen und etwas Aufwand in die Anpassung seines Handys aus China zu stecken, der bekommt viel Leistung für sehr wenig Geld“, so Spier.