Würdest du lieber ... ?

  • JavaScript

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Reeker.

    Würdest du lieber ... ?

    Hallo!

    Will gerade eine Webseite programmieren.

    Sie soll in etwa so sein wie diese hier:
    wuerdest-du.de

    Jedoch brauche ich nicht alle Features die diese Seite hat.
    Ich brauche nur die 2 Schaltflächen zum abstimmen, wie viele schon abgestimmt haben, die Stimmen in % und Facebook Kommentare.

    Würde das am liebsten mit ner Datenbank machen um die Antwortmöglichkeiten leicht hinzufügen zu können.
    Vielleicht habt ihr ja eine bessere Lösung.

    Wenn ihr irgendwelche hilfreichen Infos für mich habt, bitte meldet euch! :)
    Einen Tipp habe ich: Mach es sicherer!

    Ich hab mir mal den code bei denen genau angeschaut und es ließ sich leicht das Ergebnis der Fragen manipulieren.
    Ergebnis meines Tests kann man hier sehen: wuerdest-du.de/f-50
    vorher stand es 90% zu 10% (sollte jetzt bei 50% zu 50% sein)
    Da der Code für die Übermittlung der Stimme nicht geschützt ist, kann man ganz einfach die Sache über die Entwickler-Konsole ansteuern.

    Lösung: "Self-Executing Anonymous Functions"
    Einen netten Artikel findest du hier: http://markdalgleish.com/2011/03/self-executing-anonymous-functions/

    Edit:
    Nebenbei bemerkt braucht man für die Manipulation nur die Cookies löschen und die Seite neuladen, damit die Stimme erneut gezählt wird. (Über die Konsole ging es nur viel schneller)
    Lösungsmöglichkeiten:
    - Kontrolle über die Sperre nicht in die Hand des Benutzers legen. (Cookies, LocalStorage etc.)
    - Benutzer System verwenden. Somit kann man die Antworten an den User binden und es kann nur eine Antwort pro Frage pro Benutzer gewählt werden.
    - Captcha. Macht das ganze jedoch "nur" mühseliger.
    - Sperre über IP. Die Ip des Benutzers(anonymisiert!) wird samt der aktuellen beantworteten Frage in die Datenbank gespeichert,
    sodass beim Aufrufen der Frage dieser Wert abgefragt werden und dementsprechend gehandelt werden kann. Performance kann hier jedoch darunter leiden, wenn es massig Benutzer gibt.
    Ja, VPN... wie beim Captcha auch, macht es das ganze wieder "nur" mühselig für den 1337 H4x0r.

    Mein Tipp: Lass die Leute sich erstmal registrieren. E-Mail und Passwort + Captcha (Google reCAPTCHA lässt sich ganz leicht einbinden) + E-Mail Bestätigung und du bist fürs erste auf der sicheren Seite.
    Die meisten werden Facebook und co haben, somit kann das auch über Social login abgewickelt werden, damit die Faulen nicht so viel tippen müssen, was die Wahrscheinlichkeit der Benutzung der Seite erhöht.

    LG

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Reeker“ ()

    Reeker schrieb:

    [...]
    Lösung: "Self-Executing Anonymous Functions"
    [...]


    Das hält mich aber immernoch nicht davon ab, den Code zu kopieren und manuell auszuführen. Und wenn's besonders bequem sein soll, benutze ich dafür Tools wie Tampermonkey.
    "Sicher" ist diese Lösung also nicht, sie ist vielleicht ein kleines bisschen weniger "unsicher".
    Effektiver wäre da mMn Obfuscation, da es einigem Aufwand bedarf, diese zu reverse-engineeren.
    Außerdem, den Fehler haben schon die Entwickler von "The Division" gemacht: Traue nie dem Client! Server-sided checks sind obligatorisch!
    @X-Zat da hast du natürlich recht. Klar lässt sich dann immer noch die ajax.php, die dort benutzt wird, ansprechen. Habe auch nicht gesagt, dass man damit das gesamte Konzept dort abriegeln lässt.
    Meinen Beitrag hab ich auch nachträglich noch ergänzt. :)
    Servus,

    das mit ner Datenbank zu machen ist ja schonmal ne gute Idee - nicht unbedingt nötig weil man den ganzen Krempel in Dateien genauso speichern könnte, aber schon komfortabler und skalierbarer.

    Die Fragen ("würdest du lieber ...") kannst du in verschiedenen Formaten speichern:
    - In einer Textdatei (oder JSON oder XML) die du einfach hochladen kannst
    - In ner Excel als CSV
    - Ebenfalls in der Datenbank (dazu musst du dir dann halt ne GUI basteln um die Daten zu ändern und hinzuzufügen).

    Um die Applikation vor Manipulationen zu schützen gibt es auch wieder mehrere Wege:
    - über eine anonymisierte IP Abfrage (REMOTE_ADDR gehashed speichern und abgleichen)
    - mit Captcha, wobei das den Leuten auf die Nerven gehen könnte, außerdem schützt es nicht vor Mehrfach-Voting durch Menschen sondern nur vor Bots.
    - mit Benutzeraccount. Registrierung wäre halt dann erforderlich - wäge ab ob deine Zielgruppe das mitmacht. Falls ja könnte sich das System aber dann besser erweitern lassen, das heißt der Benutzer muss durch die Registrierung auf der Seite auch einen Benefit haben (z.B. kann er sich bei einer schon beantworteten Frage umentscheiden und er sieht auch, welche Fragen er schon alles beantwortet hat, etc....).
    - oder man muss mit seinem Facebook Account eingeloggt sein um überhaupt zu voten - praktische Lösung eigentlich, vor allem auch weil's schnell geht und das echt für niemanden zu kompliziert oder zuviel Arbeit ist. Alternativ ginge auch Google, aber nicht jeder hat einen Account dort.
    - mit E-Mail Bestätigung, das heißt der User voted aber damit das Voting in die Gesamtvotings mit einfließt muss er seine E-Mail Adresse eingeben und einen Link zur Bestätigung aufrufen. Ist aber keine 100%ig sichere Lösung weil es ja Trashmail Accounts auch noch gibt. Wenn man da einmal voted und schaut wie die E-Mail aussieht in der man den Bestätigungslink klicken muss, kann man sich einen Bot schreiben der sich ins Postfach einloggt und das automatisiert vornimmt - hab ich auch schon gemacht und ist äußerst einfach.

    Zum Datenbankdesign
    Wenn du deine DB entwirfst gibt es verschiedene Ansätze, die auch davon abhängen ob eine Frage mit mehreren anderen kombiniert werden kann oder ob es jeweils nur ein festes Paar gibt - das solltest du dir vorher noch überlegen, erst dann kann man dir in der Hinsicht überhaupt einen Vorschlag machen.

    Mehreres wäre hier dann vorstellbar, ich habe mir mal 2 überlegt:
    - Tabelle mit Fragen und den Feldern "frage1" und "frage2" sowie zwei weitere Spalten für "voting_frage1" und "voting_frage2". Das Konstrukt wäre halt sehr unflexibel, würde aber grundsätzlich seinen Zweck erfüllen.
    - Eine Tabelle mit allen Fragen (auto_increment ID und varchar für Frage) und zusätzlich eine Referenztabelle, in der die Beziehungen der Fragen zueinander festgelegt sind. Und noch eine weitere Tabelle für die Votingergebnisse, wo du dann die Benutzerauswahl (die Frage ID) inkrementieren kannst. Bei der Vorgehensweise wärst du auch insofern flexibel als dass du den Benutzer eine aus 2 oder auch mehr als 2 Antworten wählen lassen kannst. Mit SELECT und JOIN kannst du dir dann so recht schnell alle Ergebnisse zu einem Fragen-Set ausgeben lassen.

    ​Jedoch brauche ich nicht alle Features die diese Seite hat.

    Naja, die Seite hat nur ein Feature - Voten für Fragen. Das is alles. Das Thema Sicherheit hat den der das entwickelt hat auch offensichtlich eher peripher tangiert. Außerdem sollte so ein Ranz nicht unbedingt passieren: wuerdest-du.de/f-999999999999999999999999


    Link :thumbup:
    Hello World
    IP Adresse ist meine Meinung nach eine eher schlechte Lösung, da teilweise ganze Länder hinter einer einzigen IP Adresse sitzen können, eine IP Adresse gibt nicht zwangsweise Informationen über die Person aus (gibt ja auch IPS routing etc.). Außerdem könnte dann nur eine Person pro Haushalt/Universität abstimmen.

    Accounts sind meiner Meinung nach auch eher zu kompliziert, ich würde meine E-Mail Adresse da niemals eintragen, nur um die Frage zu beantworten, gleiches gilt für meinen Facebook oder G+ Account. Aus meiner Sicht wäre ReCaptcha das sinnvollste, es kostet dich keine Cent, ist einfach zu implementieren und verhindert effektiv Angriffe wie von @Reeker beschrieben (naja, Dienste wie 2Captcha heben Schutz dann in gewisser Weise wieder aus, aber du hast da ja jetzt auch nichts wirklich sicherheitstechnisch wichtiges und 2Captcha kostet Geld und ist eher ineffektiv, weil es nur sehr langsam ist).
    Mfg
    Vincent

    @VincentTB Captcha ist so gesehen Blödsinn, weil man so ja hundert mal hintereinander abstimmen kann - witzlos. Am Ende muss man immer abwägen ob man beim Komfort oder bei der Sicherheit Abstriche macht. Mit einem Captcha wird keins von beiden abgedeckt, mit einem User Account oder dem Login via Facebook hat man eigentlich einen ziemlich guten Kompromiss - den besten aus den bisher genannten Lösungen.

    Accounts sind meiner Meinung nach auch eher zu kompliziert, ich würde meine E-Mail Adresse da niemals eintragen, nur um die Frage zu beantworten

    Ja das ist unattraktiv wenn man nur mal schnell voten will. Die Alternative über Login via Social Accounts empfinde ich jedoch nicht als so wild wie du es darstellst. Quasi jeder hat Facebook und ist dort in vielen Fällen sowieso schon eingeloggt. Wie gesagt, bester Kompromiss aus meiner Sicht.


    Link :thumbup:
    Hello World

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Link“ ()

    Link schrieb:

    @VincentTB Captcha ist so gesehen Blödsinn, weil man so ja hundert mal hintereinander abstimmen kann

    Ich glaube nicht, dass du einfach so hunderte Mal mit einem Captcha abstimmen kannst (von deinem Durchhaltevermögen her), siehe die Diskussion Captchagenerve Man kann ja noch nen Cookie dazu machen. Natürlich ist Social Media die sicherste Möglichkeit, ist auch nur meine Ansicht, aber wenn ich da sehe, dass dann auf meinen Namen, E-Mail Adresse usw. zugegriffen werden kann bin ich sofort weg. Wenn man 100 Abstimmungen "faken" will, müsste man auch so um die 30 Captchas richtig ausfüllen (bei ReCaptcha), ich glaube niemand macht sich die Mühe für nur 100 Antworten. Selbst wenn ReCaptcha immer automatisch validiert (ohne diese Bilder auswählen) dauert das validieren immer so 2-3 Sekunden, für 100 Fragen ist man da locker mal 20 Minuten beschäftigt (wenn man 10 Sekunden für Seite Aufrufen, Captcha validieren und abschicken nimmt).

    Außerdem gibt es ja jetzt eine neue Funktion in ReCaptcha, die bei erfolgreichem lösen automatisch weiterleitet, sodass man das gut integrieren kann, also dass man auf das Captcha klick um abzustimmen (man kann's ja vielleicht ein bisschen umdesignen wenn das geht).
    Mfg
    Vincent

    @VincentTB Du gehörst ja auch zu denen, die sicher mit Ihren Daten umgehen. Die meisten, die solche Seiten verwenden wollen sind eben solche, denen das egal ist, jedem Trend hinterher hechten und sich mit fidget spinnern gegenseitig die Gesichter einschlagen und da ist Social Login eine gute Variante. :D

    Aber ich denke auch, dass Captchas in erster Linie reichen sollten, weil es sich einfach nicht lohnt seine Lebenszeit damit zu verschwenden ein paar hundert Stimmen pro Frage abzugeben.

    Dann wäre der Lösungsweg folgender:
    - Mit der Abgabe der Stimme muss gleichzeitig das Captcha erfüllt werden.
    wie in dem obigen Beispiel dann ebenfalls über die "ajax.php", sodass es kein drumrum gibt.

    Zum Thema mit den IPs: Man könnte ja auch die gehashte Ip mit einer Timestamp speichern und nur für eine gewisse Zeit blockieren (zb 1 Minute)

    Das artet hier schon zu einem Allgemeinen Thema aus...

    Link schrieb:

    weil es ja Trashmail Accounts auch noch gibt
    https://www.heise.de/developer/artikel/Wegwerf-und-Einmal-E-Mail-Adressen-erkennen-3357125.html

    VincentTB schrieb:

    da teilweise ganze Länder hinter einer einzigen IP Adresse sitzen können
    Und was hälst du von der Idee die MAC Adresse gehasht abzulegen? Dann bist du zwar auf das Gerät beschränkt, jedoch denke ich, dass Otto-Normalverbraucher nicht auf die Idee kommen wird und die Seite einmal mit seinem Handy, dann mit Laptop/Rechner und zum Schluss noch mal mit Tablet aufruft, nur um eine gewisse Frage immer wieder zu beantworten. Das ist eher (wie es viele Dinge im Internet sind) so ne Art "Fire & Forget" - also machen und dann wieder vergessen.
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    ​Du gehörst ja auch zu denen, die sicher mit Ihren Daten umgehen. Die meisten, die solche Seiten verwenden wollen sind eben solche, denen das egal ist, jedem Trend hinterher hechten und sich mit fidget spinnern gegenseitig die Gesichter einschlagen und da ist Social Login eine gute Variante.

    Ja, mit deinen Pauschalurteilen zeigst du auch jedem deine Einzigartigkeit. Man kann sich auch keinen Fidgetspinner kaufen und das still und leise blöd finden - vielleicht nicht ganz einfach wenn man so einen Mitteilungsdrang hat. Überhaupt ist eine Relation von Fidgetspinnern zu Nutzern sozialer Netzwerke so wie du es darstellst für mich nicht nachvollziehbar, ebenso die ungeklärte Frage was dieses Gerät in irgendjemandes Gesicht zu suchen hat.
    Aber ja, wie ich schon sagte ist das die beste Möglichkeit, viele User abzuholen ohne mit unzumutbaren Aktionen deren Absprung zu riskieren.

    ​Das artet hier schon zu einem Allgemeinen Thema aus...

    Wir diskutieren Pros und Kontras, gehört m.E. hier alles dazu.

    @VincentTB nein das hast du falsch verstanden. Es geht mir nicht darum wieviel Aufwand es ist, sondern dass es geht. Das heißt man hat es mit einer ganz offensichtlich sehr leicht fälschbaren Statistik zu tun, wenngleich es bei dieser Art von Webapplikation vielleicht nicht allzusehr von Relevanz ist.

    @Radinator
    ​Und was hälst du von der Idee die MAC Adresse gehasht abzulegen?

    Nein auf die MAC Adresse hast du ja gar keinen Zugriff, es sei denn der Client befindet sich im selben Netzwerksegment wie der Server.

    @nikexo
    Eigentlich kommt es bloß drauf an wie du die besprochenen Punkte mit den Vor- und Nachteilen für dein Vorhaben gewichtest. Wenn es dir wichtig ist dass sehr viele von deiner Anwendung Gebrauch machen, verzichte auf jegliche Art der Authentifizierung - dann kannst du das Captcha auch gleich weg lassen, weil es einfach keinerlei Effekt hat. Dein großer Vorteil wird sein, dass sehr viele Leute "abstimmen", eine Absprungrate fällt dann so gesehen komlpett weg.
    Wenn du es lieber ein bisschen sicherer machen willst (rein im Sinne von Mehrfachvotings) wurden ja oben vielerlei Alternativen genannt.


    Link :thumbup:
    Hello World

    Link schrieb:

    Ja, mit deinen Pauschalurteilen zeigst du auch jedem deine Einzigartigkeit. Man kann sich auch keinen Fidgetspinner kaufen und das still und leise blöd finden - vielleicht nicht ganz einfach wenn man so einen Mitteilungsdrang hat. Überhaupt ist eine Relation von Fidgetspinnern zu Nutzern sozialer Netzwerke so wie du es darstellst für mich nicht nachvollziehbar, ebenso die ungeklärte Frage was dieses Gerät in irgendjemandes Gesicht zu suchen hat.


    Keine Ahnung, warum du das ernst nimmst, aber ja, ich kann dir gerne ein Beispiel liefern: youtube.com/results?search_que…+fidget+spinner+vs+tongue
    Aber gut, das mit den Fidgetspinnern war jetzt nicht das beste Beispiel, um auf die Trends zu verweisen, wenn es darum geht seine Reichweite zu erhöhen... oder etwa doch? Man weiß es nicht.
    Ja gut, meine Argumente, um Social Login attraktiv zu machen, ist höchst fragwürdig :saint:

    Link schrieb:

    es sei denn der Client befindet sich im selben Netzwerksegment wie der Server.
    Oder man lässt den Client ein PHP Script ausführen, welches die MAC in das DOM schreibt. Das kann man dann wiederum per JS und einem POST an den Server zurück schicken. stackoverflow.com/questions/50…dress-of-client-using-php
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Servus,

    ja aber soweit ich weiß geht das nur irgendwie mit ActiveX, also ist es ein Hack.
    // Edit ja genau wie in dem Thread beschrieben ist es so ein ActiveX Krempel und es geht nur mit Windows. Also ich glaub nicht dass wir diese Richtung ernsthaft als möglichen Lösungsweg einschlagen und diskutieren sollten. Am besten nicht mehr drüber sprechen ... sshhh.

    @Reeker
    Ja gut, meine Argumente, um Social Login attraktiv zu machen, ist höchst fragwürdig

    Ich denk' auch ;) Und meinst du damit dass ich dich auch in Zukunft nicht ernst nehmen soll oder .. ? :D


    Link :thumbup:
    Hello World
    ActiveX scheint für mich auch eher eine Spielerei zu sein, also nicht zu empfehlen.
    Können also festhalten, dass es keine ultimative Lösung gibt, um Benutzer davon abzuhalten mehrfach abzustimmen, außer ein Login zu verlangen.

    Naja, mal abwarten was der TE sagt.

    @Link Zumindest nicht, wenn es um Zwischenmenschliches geht :)

    Edit:
    ​Können also festhalten, dass es keine ultimative Lösung gibt, um Benutzer davon abzuhalten mehrfach abzustimmen, außer ein Login zu verlangen.

    ... Selbst dann könnte man sich mehrer Accounts erstellen... Ach, lassen wir das...

    Reeker schrieb:


    Können also festhalten, dass es keine ultimative Lösung gibt, um Benutzer davon abzuhalten mehrfach abzustimmen, außer ein Login zu verlangen.

    Edit:
    Können also festhalten, dass es keine ultimative Lösung gibt, um Benutzer davon abzuhalten mehrfach abzustimmen, außer ein Login zu verlangen.

    ... Selbst dann könnte man sich mehrer Accounts erstellen... Ach, lassen wir das...

    Äh .. du merkst dass du dich gerade selbst zitiert hast und im nächsten Satz darauf antwortest und dir selbst widersprichst? Wtf? Haha ich feier' das grad :D


    Link :thumbup:
    Hello World
    @Link Ja, hab ich gemerkt :D

    Was soll man machen. Gibt halt hierfür keine spezielle Lösung. Zumindest dafür nicht. TE hat ja auch nicht explizit danach gefragt, weswegen ich mich frage, warum ich eigentlich mit der ganzen Thematik angefangen habe, zumal das schon zu tausendfacher Ausführung überall im Netz diskutiert wurde...