{ "info": { "author": "Caleb Kinney", "author_email": "cakinney@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# secure.py\n\n[![image](https://img.shields.io/pypi/v/secure.svg)](https://pypi.org/project/secure/)\n[![Python 3](https://img.shields.io/badge/python-3-blue.svg)](https://www.python.org/downloads/)\n[![image](https://img.shields.io/pypi/l/secure.svg)](https://pypi.org/project/secure/)\n[![image](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)\n\nsecure.py \ud83d\udd12 is a lightweight package that adds optional security headers and cookie attributes for Python web frameworks.\n\n### Supported Python web frameworks:\n[aiohttp](https://docs.aiohttp.org), [Bottle](https://bottlepy.org), [CherryPy](https://cherrypy.org), [Django](https://www.djangoproject.com), [Falcon](https://falconframework.org), [Flask](http://flask.pocoo.org), [hug](http://www.hug.rest), [Masonite](https://docs.masoniteproject.com), [Pyramid](https://trypyramid.com), [Quart](https://pgjones.gitlab.io/quart/), [Responder](https://python-responder.org), [Sanic](https://sanicframework.org), [Starlette](https://www.starlette.io/), [Tornado](https://www.tornadoweb.org/) \n\n\n## Install\n**pip**:\n\n```console\n$ pip install secure\n```\n\n**Pipenv**:\n\n```console\n$ pipenv install secure\n```\n\nAfter installing secure:\n\n```Python\nfrom secure import SecureHeaders, SecureCookie\n\nsecure_headers = SecureHeaders()\nsecure_cookie = SecureCookie()\n```\n\n## Secure Headers\n\n ### Example\n`secure_headers.framework(response)`\n\n **Default HTTP response headers:** \n\n```HTTP\nStrict-Transport-Security: max-age=63072000; includeSubdomains\nX-Frame-Options: SAMEORIGIN\nX-XSS-Protection: 1; mode=block\nX-Content-Type-Options: nosniff\nReferrer-Policy: no-referrer, strict-origin-when-cross-origin\nCache-control: no-cache, no-store, must-revalidate, max-age=0\nPragma: no-cache\nExpires: 0\n```\n\n## Secure Cookie\n\n### Example\n\n```Python\nsecure_cookie.framework(response, name=\"spam\", value=\"eggs\")\n```\n\n**Default Set-Cookie HTTP response header:** \n\n```HTTP\nSet-Cookie: spam=eggs; Path=/; secure; HttpOnly; SameSite=lax\n```\n\n## Documentation\nPlease see the full set of documentation at [https://secure.readthedocs.io](https://secure.readthedocs.io)\n\n## Resources\n- [kennethreitz/setup.py: \ud83d\udce6 A Human\u2019s Ultimate Guide to setup.py.](https://github.com/kennethreitz/setup.py)\n- [OWASP - Secure Headers Project](https://www.owasp.org/index.php/OWASP_Secure_Headers_Project)\n- [OWASP - Session Management Cheat Sheet](https://www.owasp.org/index.php/Session_Management_Cheat_Sheet#Cookies)\n- [Mozilla Web Security](https://infosec.mozilla.org/guidelines/web_security)\n- [securityheaders.com](https://securityheaders.com)\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/cakinney/secure.py", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "secure", "package_url": "https://pypi.org/project/secure/", "platform": "", "project_url": "https://pypi.org/project/secure/", "project_urls": { "Homepage": "https://github.com/cakinney/secure.py" }, "release_url": "https://pypi.org/project/secure/0.2.1/", "requires_dist": null, "requires_python": ">=3", "summary": "A lightweight package that adds optional security headers and cookie attributes for Python web frameworks.", "version": "0.2.1" }, "last_serial": 4631165, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "bef19ac3c8c5d4e087226dd27942b7fa", "sha256": "8983b68f607cb35c58b642cd77ab52a275770e0a4a21a1ab300702e5a8ff38e4" }, "downloads": -1, "filename": "secure-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bef19ac3c8c5d4e087226dd27942b7fa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 5178, "upload_time": "2018-11-27T00:57:10", "url": "https://files.pythonhosted.org/packages/fd/df/a94e8f1e8f2b2f287d7fbee704cc6e57937be74373c8b4a9a2d0d4ee24f2/secure-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "21c238d052f9b336d7940467f8a8a932", "sha256": "ad29d50a9eabd6b9dae7bfe7f4409adfe13244cd56ee079586b0c9ae0538f51c" }, "downloads": -1, "filename": "secure-0.1.0.tar.gz", "has_sig": false, "md5_digest": "21c238d052f9b336d7940467f8a8a932", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 5815, "upload_time": "2018-11-27T00:57:13", "url": "https://files.pythonhosted.org/packages/aa/43/445404da1e62f5c3ab1f8767fb9f8f7d6dbcf2862d1bd176635e51b174a2/secure-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "3182c8663094af01a946e2280357e43f", "sha256": "edac4d87af19243201271eafba0b167b1ffa1afc0c092f6edde4a02a681af580" }, "downloads": -1, "filename": "secure-0.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "3182c8663094af01a946e2280357e43f", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3.6.0", "size": 4756, "upload_time": "2018-11-27T03:44:27", "url": "https://files.pythonhosted.org/packages/35/2c/11e92f6880b35661aa44508a5827d46a423f1bd5cdb02400b80472bdaaf6/secure-0.1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a7b8532ddc5d44ee9fa674090f54e749", "sha256": "d7dae7cbfbfde04dde5c250572b7e35d89558e6e3f79d205fbcc1bb2c40cc247" }, "downloads": -1, "filename": "secure-0.1.1.tar.gz", "has_sig": false, "md5_digest": "a7b8532ddc5d44ee9fa674090f54e749", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 6186, "upload_time": "2018-11-27T03:44:28", "url": "https://files.pythonhosted.org/packages/8c/87/a892938758e48e2142632e6b2466d25a82583df57d2981701c203f78b126/secure-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "aef3a9dfb86a9ec120c2716972976032", "sha256": "6d3d812429fb0c72a137348d5ca56ec674a69d9a1095c6968fa6368cca72b9d7" }, "downloads": -1, "filename": "secure-0.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "aef3a9dfb86a9ec120c2716972976032", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3.6.0", "size": 5017, "upload_time": "2018-11-27T10:46:07", "url": "https://files.pythonhosted.org/packages/8a/d3/87ed694df0687d29971c98d9b4a55d6a9195b96c07280721eaf5fd22c224/secure-0.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bf5cfb4db3e221c0e39aa4fbe4712ab1", "sha256": "b1ce00abd69d1f17a026481b191468d67b6cfcf2721b5333268a2253be2f5f9a" }, "downloads": -1, "filename": "secure-0.1.2.tar.gz", "has_sig": false, "md5_digest": "bf5cfb4db3e221c0e39aa4fbe4712ab1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 6434, "upload_time": "2018-11-27T10:46:08", "url": "https://files.pythonhosted.org/packages/14/1a/e832c290cb8b9da154871578c8727d1a1cb78b47dd3bc32361b8a9d22ce9/secure-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "0f8ab54b9ed23685d537cc2be7d6c289", "sha256": "1fac6cc38823d8da8eee6db0ae28c117a9d2b8d52986aa4dc0291b22e9678f2b" }, "downloads": -1, "filename": "secure-0.1.3-py2-none-any.whl", "has_sig": false, "md5_digest": "0f8ab54b9ed23685d537cc2be7d6c289", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3.6.0", "size": 6987, "upload_time": "2018-11-30T10:54:11", "url": "https://files.pythonhosted.org/packages/9c/80/f3102e3adef7b303177e08fb1eeaf780f4c8ee69c019604d1dfb95cd1c1e/secure-0.1.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2b9c4c5928b558a8927cf0f8cf76c510", "sha256": "7e956a2e022d0a0f73bebecdf6043e4404d9bcb6959842331638378197a479cb" }, "downloads": -1, "filename": "secure-0.1.3.tar.gz", "has_sig": false, "md5_digest": "2b9c4c5928b558a8927cf0f8cf76c510", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 9104, "upload_time": "2018-11-30T10:54:13", "url": "https://files.pythonhosted.org/packages/44/1e/8b02157af56fe1e82a0838bd5bc00a71cc4ca90857aec581b28176b30109/secure-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "4b8008db23ed1f2f04b783f315cbb057", "sha256": "d49d36ef7a596a921f7911cc36e2df63c07edb6e08c8f11f1376c79c976ffbbf" }, "downloads": -1, "filename": "secure-0.1.4-py2-none-any.whl", "has_sig": false, "md5_digest": "4b8008db23ed1f2f04b783f315cbb057", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3.6.0", "size": 7866, "upload_time": "2018-12-01T15:07:35", "url": "https://files.pythonhosted.org/packages/ab/f1/b3023bb12f078a55d17ef92a8f7086f4b4347a404a9e3ebc94b17bb1f1ee/secure-0.1.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "623fdfcc6fb5699e294aac55f1ced49a", "sha256": "3a02707a75300031365d82e42bbeddb82a87bec5769dd012093e38d4acfc3e48" }, "downloads": -1, "filename": "secure-0.1.4.tar.gz", "has_sig": false, "md5_digest": "623fdfcc6fb5699e294aac55f1ced49a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 12381, "upload_time": "2018-12-01T15:07:36", "url": "https://files.pythonhosted.org/packages/1c/fc/e7e720ee2aa6d084a880c5cd74062e6a74f5f9074614844925d4f07161d5/secure-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "f97acaf185b66abbd9bf78a861864c63", "sha256": "6416d9b8097e24f3b6a856897a9197995c4e812d9b89f32b04d4ac2e419ef7d6" }, "downloads": -1, "filename": "secure-0.1.5-py2-none-any.whl", "has_sig": false, "md5_digest": "f97acaf185b66abbd9bf78a861864c63", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3.6.0", "size": 8069, "upload_time": "2018-12-02T15:20:29", "url": "https://files.pythonhosted.org/packages/da/50/e46b24110344f61f43b645d608943ace4ab0298415d11d733b5b508fb530/secure-0.1.5-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a6e174a01d54274d8cabd1342446c817", "sha256": "dd1161df437521e4430f85333fc116da9c3110a2a75746b11b2d2d2f5d923dc9" }, "downloads": -1, "filename": "secure-0.1.5.tar.gz", "has_sig": false, "md5_digest": "a6e174a01d54274d8cabd1342446c817", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 12706, "upload_time": "2018-12-02T15:20:31", "url": "https://files.pythonhosted.org/packages/e2/c3/c862d3931aa1dab44d9604f7e28027574d7d97403525ba30ceb143bf1b4d/secure-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "bd171d374f8b9fb7d4c49668f068cd55", "sha256": "06e433ef8168eedbdce747352b181a52a69c9ba61c268c6f220c2ed5633ae94c" }, "downloads": -1, "filename": "secure-0.1.6-py2-none-any.whl", "has_sig": false, "md5_digest": "bd171d374f8b9fb7d4c49668f068cd55", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3", "size": 8898, "upload_time": "2018-12-04T11:29:35", "url": "https://files.pythonhosted.org/packages/d7/c5/ffc12251545b6dd77cb929d6ee7b416317584519d4ba329e96800f8e68b3/secure-0.1.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7231e82eb5cca6b10f8b0b810fc61a41", "sha256": "6241419bfb51e27cae4e82ed5cb9c4edebecbc19ec808bf05e2be8eb55e41fc3" }, "downloads": -1, "filename": "secure-0.1.6.tar.gz", "has_sig": false, "md5_digest": "7231e82eb5cca6b10f8b0b810fc61a41", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 14835, "upload_time": "2018-12-04T11:29:36", "url": "https://files.pythonhosted.org/packages/6e/b8/04961fee08977a1918698bbee1c262c720f013431d19bf8852110f9c9559/secure-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "d843069f1dfab2236f7d3e14ec3fa62b", "sha256": "812d44592136b9437568c216b536b6e5d6b988b879700db8173310e21c8e19c2" }, "downloads": -1, "filename": "secure-0.1.7-py2-none-any.whl", "has_sig": false, "md5_digest": "d843069f1dfab2236f7d3e14ec3fa62b", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3", "size": 9943, "upload_time": "2018-12-06T01:26:46", "url": "https://files.pythonhosted.org/packages/ea/95/497097623ec2b6e4e08852ab349340cb76cf71c7b4965114a6e398cb37ff/secure-0.1.7-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eed652c50bd0627db66a142cd3b2d463", "sha256": "1e3e31667123587c587f0badc30c3b344dd5ec127a89695d02dc49d371e03854" }, "downloads": -1, "filename": "secure-0.1.7.tar.gz", "has_sig": false, "md5_digest": "eed652c50bd0627db66a142cd3b2d463", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 15912, "upload_time": "2018-12-06T01:26:56", "url": "https://files.pythonhosted.org/packages/b9/13/32ebed2888bd9b558deff5afcc80c66ef22440a6eed3844d0fc7e3ceb7ba/secure-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "0e34b39fadf80ea38010f1f2f4288c5f", "sha256": "572a9fafa10de649c2a4d2522eb8288ffc1761e3a68f1d3c6ae8f0714950f0c8" }, "downloads": -1, "filename": "secure-0.1.8-py2-none-any.whl", "has_sig": false, "md5_digest": "0e34b39fadf80ea38010f1f2f4288c5f", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3", "size": 10632, "upload_time": "2018-12-08T14:56:13", "url": "https://files.pythonhosted.org/packages/76/bc/bc0f631f2ee2f62fd36fc43029ac5c41786a6a157dcbf7b58975952d8f7f/secure-0.1.8-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1fff8f54972ac62d2d13841d35de8d92", "sha256": "ba9d2e610aecc09817d092390ad0a97627700774ee642decb73b7cbf6a5ec32c" }, "downloads": -1, "filename": "secure-0.1.8.tar.gz", "has_sig": false, "md5_digest": "1fff8f54972ac62d2d13841d35de8d92", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 17088, "upload_time": "2018-12-08T14:56:15", "url": "https://files.pythonhosted.org/packages/8f/c4/e67059790ea0ee8793bfbab19df05fee6c9bf6c865dea23e2bab9dbfa967/secure-0.1.8.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "dcadbac446b5f6b97a5c4eb05c493449", "sha256": "90a4a01b8799fae2d10c98f08af83bc9604587cddea2ad82002d1309ac38c845" }, "downloads": -1, "filename": "secure-0.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "dcadbac446b5f6b97a5c4eb05c493449", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3", "size": 14319, "upload_time": "2018-12-16T11:57:00", "url": "https://files.pythonhosted.org/packages/ac/2a/c6d41b8eaf78e78a5fe1c0edeb0602096f81435a43aa6fc5bfec99b73529/secure-0.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0377a6938c862e8889f52b450331bb8e", "sha256": "6f6408fa8941e2da173707dc535a9b9182ebc7626a44584972f36790b6814144" }, "downloads": -1, "filename": "secure-0.2.0.tar.gz", "has_sig": false, "md5_digest": "0377a6938c862e8889f52b450331bb8e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 27058, "upload_time": "2018-12-16T11:57:02", "url": "https://files.pythonhosted.org/packages/96/fa/72300827429ce00a834c02334af75e18bb704562a560cca491ac1d054ea3/secure-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "776822619c1fb3980027b00035d7e566", "sha256": "b3bf1e39ebf40040fc3248392343a5052aa14cb45fc87ec91b0bd11f19cc46bd" }, "downloads": -1, "filename": "secure-0.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "776822619c1fb3980027b00035d7e566", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3", "size": 9391, "upload_time": "2018-12-24T11:05:35", "url": "https://files.pythonhosted.org/packages/1a/c6/f7ff6afe4f296c289f5d2f8cc517bd481c2f9346c8f12d090499fef2b791/secure-0.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7d3162f23db90492e81b015694f9b036", "sha256": "4dc8dd4b548831c3ad7f94079332c41d67c781eccc32215ff5a8a49582c1a447" }, "downloads": -1, "filename": "secure-0.2.1.tar.gz", "has_sig": false, "md5_digest": "7d3162f23db90492e81b015694f9b036", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 10382, "upload_time": "2018-12-24T11:05:36", "url": "https://files.pythonhosted.org/packages/8c/ce/d809b79258afb4845c2935c3ccbfe58ec9c583718bcd10e9c549d71679e9/secure-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "776822619c1fb3980027b00035d7e566", "sha256": "b3bf1e39ebf40040fc3248392343a5052aa14cb45fc87ec91b0bd11f19cc46bd" }, "downloads": -1, "filename": "secure-0.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "776822619c1fb3980027b00035d7e566", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3", "size": 9391, "upload_time": "2018-12-24T11:05:35", "url": "https://files.pythonhosted.org/packages/1a/c6/f7ff6afe4f296c289f5d2f8cc517bd481c2f9346c8f12d090499fef2b791/secure-0.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7d3162f23db90492e81b015694f9b036", "sha256": "4dc8dd4b548831c3ad7f94079332c41d67c781eccc32215ff5a8a49582c1a447" }, "downloads": -1, "filename": "secure-0.2.1.tar.gz", "has_sig": false, "md5_digest": "7d3162f23db90492e81b015694f9b036", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 10382, "upload_time": "2018-12-24T11:05:36", "url": "https://files.pythonhosted.org/packages/8c/ce/d809b79258afb4845c2935c3ccbfe58ec9c583718bcd10e9c549d71679e9/secure-0.2.1.tar.gz" } ] }