Giter VIP home page Giter VIP logo

ws-domainvalidator's Introduction

WS-DomainValidator

WS-DomainValidator is a webservice created by the Chair for Network and Data Security from the Ruhr-University Bochum for the SIWECOS Project. The Webservice checks a provided URL syntactical correctnes, extracts the domain, extracts possible HTTP redirects and retrieves the DNS MX-Records for the responsible mail server domains.

Compiling

In order to compile and use WS-DomainValidator, you need to have java (OpenJDK 8) installed, as well as maven.

$ cd WS-DomainValidator
$ mvn clean package

Running

In order to run WS-DomainValidator you need to deploy the .war file from the target/ folder to your favourite java application server (eg. Glassfish, Tomcat ...). After that the webservice should be up and running and can be called by sending a POST like

{
  "domain": "https://google.de",
  "crawl": true,
  "maxCount": 10,
  "maxDepth": 2,
  "userAgent": "Mozilla/5.0 (X11; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0",
  "allowSubdomains": true
  
}

to

http://127.0.0.1:8080/WS-HostValidator/validate

or

http://127.0.0.1:8080/validate

Depending on your application server.

Results

The webservice will do various sanity checks and dns queries and will then directy return the result like this: An example output may look like this:

{
    "name": "Validator",
    "hasError": false,
    "domain": "google.de",
    "originalUrl": "http://google.de",
    "urlToScan": "http://google.de",
    "urlIsSyntacticalOk": true,
    "dnsResolves": true,
    "httpRedirect": false,
    "mailServerDomainList": [
        "aspmx.l.google.com.",
        "alt3.aspmx.l.google.com.",
        "alt2.aspmx.l.google.com.",
        "alt4.aspmx.l.google.com.",
        "alt1.aspmx.l.google.com."
    ]
}

Docker

You can also run WS-HostValidator with Docker. You can build with:

docker build . -t validator

You can then run it with:

docker run -it --network host validator

The webservice is then reachable under:

http://127.0.0.1:8080/validate

ws-domainvalidator's People

Contributors

dependabot[bot] avatar ic0ns avatar lednerb avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

dajezi 5l1v3r1

ws-domainvalidator's Issues

Crawling: Unterschiedliche Pfade bevorzugen

Es wäre praktisch, wenn der Scanner die crawledUrls so zurückgibt, dass die Pfade am unterschiedlichsten sind.

Sprich:
Anstatt /cms und /cms/wordpress und /cms/contao darauf konzentrieren, dass die Liste nach Unterschiedlichkeit geordnet wird.

Hintergrund:
Aktuell werden wir wahrscheinlich 10 weitere URLs crawlen.
Es macht mehr Sinn dann /blog und /shop zu erhalten, anstatt viele ähnliche Unterseiten.

Domain wird nicht bearbeitet

Bei einer getesten Domain tritt folgendes Verhalten auf:

  1. Start-Request wird angenommen, es wird Success geliefert
  2. Es erfolgt keine Bearbeitung durch den DomainValidator, keine Response wird geschickt, Rechnerauslastung bleibt konstant

Betroffene Domain siehe Slack.

Option `allowSubdomains` implementieren

Um die Crawler-Funktionalität direkt zu integrieren wäre eine Option allowSubdomains wünschenswert.

Sofern allowSubdomains: false gesetzt wird, sollen nur crawledUrls der angegebenen domain zurückgeliefert werden. false kann hierbei auch gerne der Standard-Wert sein.

Externe URLs sollten generell nicht zurückgeliefert werden.

Callback optional machen oder Input-Validierung

Wird kein valider callbackurls-Parameter beim Request mitgegeben, so wird der Validator den Request mit HTTP 200 und Success annehmen, ihn abarbeiten und dann ene java.lang.NullPointerException werfen, da das Feld fehlt.

Entweder ohne callbackurls-Parameter direkt die Ergebnisse zurückliefern wie in der früheren Version oder entsprechende Fehlermeldung beim Start senden.

Timeout für Callbacks fehlt

Momentan gibt es anscheinend kein Timeout für die Callback Routine:

Ist ein Port bzw. die Adresse nicht erreichbar, so bleibt der Thread blockiert.

DomainValidator durch Domain in 100%-Auslastungsschleife

Bei einer Domain tritt folgendes Verhalten auf:

  1. Der StartRequest wird angenommen, es wird Success zurückgeliefert
  2. Der DomainValidator belegt einen Core zu 100% und kommt aus dieser Schleife nicht mehr heraus. Lediglich manuelles abschießen behebt den Fehler.

Betroffene Domain siehe Slack

Callback Implementieren

Die Option callbackurls wird benötigt, um den Validator / Crawler in regelmäßigen Abständen erneut anstoßen zu können um bspw. die Liste der MX-Domains aber auch der crawledUrls zu aktualisieren.

Entsprechend soll dann eine Queue abgearbeitet werden und das Ergebnis an die definierten URLs gesendet werden.

Detektion Seite nicht erreichbar

Beim Starten des Validators/Crawlers mit einer nicht (mehr) existierenden Domain bekomme ich folgende Antwort:

{
   "name":"Validator",
   "hasError":false,
   "domain":"not-existingfakjsdfjka.com",
   "originalUrl":"http://not-existingfakjsdfjka.com",
   "urlToScan":"http://not-existingfakjsdfjka.com",
   "urlIsSyntacticalOk":true,
   "dnsResolves":false,
   "httpRedirect":null,
   "mailServerDomainList":[

   ],
   "crawledUrls":[

   ]
}

Ich erhalte die Felder httpRedirect: null und dnsResolves: false, jedoch auch hasError: false.

Fragen

  1. Müsste das hasError nicht true sein?
  2. originalUrl: Was besagt dieser Wert? Es scheint, als wäre an die Domain einfach das http://-Schema angehängt?
  3. Für SIWECOS ist ja hauptsächlich der Webauftritt relevant. Wie kann man erkennen, ob die Seite noch erreichbar / online ist? Dies ist relevant für SIWECOS/siwecos-business-layer#138

.space TLD wird nicht aufgelöst

Wir haben eine Domain, welche die TLD .space nutzt.

Diese wird nicht aufgelöst und als syntaktisch inkorrekt markiert:

{
   "name":"Validator",
   "hasError":false,
   "domain":null,
   "originalUrl":"http://example.space",
   "urlToScan":null,
   "urlIsSyntacticalOk":false,
   "dnsResolves":null,
   "httpCouldConnect":null,
   "httpStatusCode":null,
   "httpRedirect":null,
   "mailServerDomainList":null,
   "crawledUrls":null
}

Option allowSubdomains fehlerhaft

Wird allowSubdomains: false gesetzt, so liefert der Crawler keine crawledUrls mehr aus.

Ziel der Option soll es ja sein, bspw. bei Übergabe der Domain siwecos.de lediglich Ergebnisse für siwecos.de und nicht für bspw. blog.siwecos.de oder www.siwecos.de zu liefern.

Momentan wird jedoch kein Crawling mehr ausgeführt.

Anpassung Log-Level

Momentan werden alle Debug-Logs mit ausgegeben.

Bitte Log-Level auf mind. Info anheben, ggf. mehr - soweit sinnvoll.

Option `maxAmountUrlsToCrawl` implementieren

Eine optionale Begrenzung der Anzahl der zurückgelieferten gecrawlten URLs wird benötigt.

Wird bspw. maxAmountUrlsToCrawl: 10 gesendet, sollen maximal 10 URLs zurückgeliefert werden.

Hierbei werden nicht die 10 ersten URLs gewünscht, sondern die 10 "priorisiertesten".
Siehe hierzu auch weitere Kommunikation.

Fehlender "domain" Parameter

Bei einigen Domains, wird der Parameter domain nicht übermittelt, dieser wird aber zwingend benötigt.

Der Parameter domain soll genau der sein, der auch beim Start-Request übermittelt wird.

Bitte dementsprechend ändern.

urlToScan wird nicht benötigt, wenn die URL nicht per HTTP erreichbar ist.
(momentan wird ein urlToScan konstruiert, der domain-Parameter aber mit null zurückgegeben)


Beispiel-Domain Liste siehe Slack: Liste 1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.