Browse Source

Add additional validation on input

Baptiste Jonglez 10 years ago
parent
commit
8952658488
2 changed files with 9 additions and 2 deletions
  1. 7 2
      peerfinder.py
  2. 2 0
      templates/submit_error.html

+ 7 - 2
peerfinder.py

@@ -28,7 +28,10 @@ def is_valid_ip(ip):
     return netaddr.valid_ipv4(ip) or netaddr.valid_ipv6(ip)
 
 def resolve_name(hostname):
-    return list({s[4][0] for s in socket.getaddrinfo(hostname, None)})
+    try:
+        return list({s[4][0] for s in socket.getaddrinfo(hostname, None)})
+    except socket.gaierror:
+        return []
 
 class Target(db.Model):
     """Target IP to ping"""
@@ -165,13 +168,15 @@ def robots():
 @app.route('/submit', methods=['POST'])
 def submit_job():
     if 'target' in request.form:
-        target = request.form['target']
+        target = request.form['target'].strip()
         if is_valid_ip(target):
             # Explicit IP
             targets = [Target(target)]
         else:
             # DNS name, might give multiple IP
             targets = [Target(ip) for ip in resolve_name(target)]
+        if targets == []:
+            return render_template('submit_error.html', target=request.form['target'])
         for t in targets:
             db.session.add(t)
         db.session.commit()

+ 2 - 0
templates/submit_error.html

@@ -0,0 +1,2 @@
+<p><strong>Error:</strong> the target you specified (&quot;{{ target
+}}&quot;) could not be resolved using DNS.</p>