Browse Source

show warning if session cookie domain is ip

closes #2007
pull/2282/head
José Oliveira 8 years ago committed by David Lord
parent
commit
c3d49e29ea
No known key found for this signature in database
GPG Key ID: 7A1C87E3F5BC42A8
  1. 20
      flask/helpers.py
  2. 6
      flask/sessions.py

20
flask/helpers.py

@ -976,3 +976,23 @@ def total_seconds(td):
:rtype: int :rtype: int
""" """
return td.days * 60 * 60 * 24 + td.seconds return td.days * 60 * 60 * 24 + td.seconds
def is_ip(ip):
"""Returns the if the string received is an IP or not.
:param string: the string to check if it an IP or not
:param var_name: the name of the string that is being checked
:returns: True if string is an IP, False if not
:rtype: boolean
"""
import socket
for family in (socket.AF_INET, socket.AF_INET6):
try:
socket.inet_pton(family, ip)
except socket.error:
pass
else:
return True
return False

6
flask/sessions.py

@ -11,13 +11,14 @@
import uuid import uuid
import hashlib import hashlib
from warnings import warn
from base64 import b64encode, b64decode from base64 import b64encode, b64decode
from datetime import datetime from datetime import datetime
from werkzeug.http import http_date, parse_date from werkzeug.http import http_date, parse_date
from werkzeug.datastructures import CallbackDict from werkzeug.datastructures import CallbackDict
from . import Markup, json from . import Markup, json
from ._compat import iteritems, text_type from ._compat import iteritems, text_type
from .helpers import total_seconds from .helpers import total_seconds, is_ip
from itsdangerous import URLSafeTimedSerializer, BadSignature from itsdangerous import URLSafeTimedSerializer, BadSignature
@ -336,6 +337,9 @@ class SecureCookieSessionInterface(SessionInterface):
def save_session(self, app, session, response): def save_session(self, app, session, response):
domain = self.get_cookie_domain(app) domain = self.get_cookie_domain(app)
if domain is not None:
if is_ip(domain):
warnings.warn("IP introduced in SESSION_COOKIE_DOMAIN", RuntimeWarning)
path = self.get_cookie_path(app) path = self.get_cookie_path(app)
# Delete case. If there is no session we bail early. # Delete case. If there is no session we bail early.

Loading…
Cancel
Save