Security
Table of Contents
- SOC 2 Compliance
- Accessing Data in Ghost Inspector
- Storing Data in Ghost Inspector
- Ghost Inspector Employee Access
- Do you have concerns about security? Get in touch with us.
- Contacting Ghost Inspector Securely
SOC 2 Compliance
SOC 2, more formally known as Service Organization Control 2, is a voluntary compliance standard for service organizations, developed by the American Institute of CPAs (AICPA). It specifies how organizations should manage customer data. SOC 2 is both a technical audit and a requirement that comprehensive information security policies and procedures be written and followed.
Ghost Inspector achieved SOC 2 compliance in 2021 with the completion of our SOC 2 Type I report. The trust services criteria of our audit include security, availability and confidentiality. Our Type II audit period is currently underway and will be completed in 2024. Contact support to request a copy of our SOC 2 report.
Accessing Data in Ghost Inspector
Ghost Inspector uses best practices for internet security. This helps ensure that your data is safe, secure, and available only to authorized users. Your data will be completely inaccessible to anyone else unless you explicitly choose to share that data with the public.
Ghost Inspector enforces secure HTTPS for our entire website, including the public (unauthenticated) parts of the site. All communications with Ghost Inspector’s API are also protected with SSL. We also use HTTP Strict Transport Security to ensure your web browser never interacts with Ghost Inspector over insecure HTTP.
Ghost Inspector provides each user in your organization with a unique username (e-mail address) and password. These credentials must be entered to access your organization’s data. A private API key is also available within each account which must be used when accessing our API. 2 factor authentication is available for all user accounts.
The Ghost Inspector recording extension allows you to record your actions and make them into a test. It only does this when you manually start recording a test; it’s not tracking your actions otherwise. Active recording is indicated by a green toolbar icon. The recording stops the second you finish (or cancel). Furthermore, the extension only sends the recorded data to our servers when you save the test. It does not send this data to our servers during the recording process — only when you explicitly save it.
The extension is only capable of making a small number of API calls to our servers. It can authenticate your account. We do this with your e-mail address and password, but we do not store a copy of these locally. Instead, we store your API key for future authentication. Other API calls are used to get a list of your current suites and tests. The last type of API call that the extension performs is sending your recording to our servers when you save it. All of these are done over HTTPS.
Storing Data in Ghost Inspector
Ghost Inspector is hosted on Amazon Web Services which provides comprehensive security practices for our underlying infrastructure. We follow AWS recommended best practices for architecting in the cloud. See AWS Cloud Security Documentation for more information. Ghost Inspector runs services and stores data in the us-east-1 region located in Northern Virginia, USA. We do offer various global geolocations for test running. These geolocations are not used by default, only when explicitly enabled for your tests. Each geolocation corresponds with a specific AWS region and operates as a network proxy only; it does not run tests or host databases directly.
Ghost Inspector allows you to store browser actions in a test and execute them from our servers. This can include logging into websites with a set of credentials. We provide an option for making values private. This prevents the value from being displayed in your test results but does not encrypt the actual value in our database. All test information is stored as plain text in our database. While we take the utmost precautions to secure our servers and database (including the use of “data at rest” encryption on database disk volumes), if a database breach were to occur, test data would be accessible. For this reason, we insist that you never use live credentials or any type of sensitive data within a test — whether specified manually or recorded with our extension.
If your test requires an account login, dummy data and/or staging servers should be used. If you're logging into a production application with Ghost Inspector, you should use an account designated for Ghost Inspector that does not contain any sensitive data and can easily be disabled. You should never use your own private credentials.
Why do we take this stance? The nature of browser testing makes encryption of values very challenging to uphold in all situations. We need access to plain text values to assign them into inputs, like a password field in a login form. This means we can't simply hash passwords to some irreversible value the way you typically do when storing passwords. Even when encrypting values in our database, we still need to send them in plaintext to the browser via automation APIs. There's a chance the value could be stored in a log file by the test runner or another service. If assigned improperly, the value could show up in a video or appear in a screenshot. There are many opportunities for a value to be exposed, some of which are out of our control and are instead based on the design of the test itself. For that reason — and because Ghost Inspector is designed as a testing product — our stance is simply that sensitive credentials should not be stored with us.
We understand that this may disqualify some companies from leveraging our service, but we feel that it's the right approach for us considering the risks involved in allowing sensitive information to be stored and used in the way that browser testing requires.
Ghost Inspector Employee Access
Ghost Inspector employees will only access your account data when one of the following scenario occurs:
- You request help from the Ghost Inspector support team and provide explicit permission to access a given resource. Permission will be attained through the support conversation. Permission is assumed when you send a specific resource identification or link URL to a resource in our system.
- The Ghost Inspector engineering team determines that there is a security issue or system-level interruption being caused by a specific resource and is required to investigate.
- Ghost Inspector suspects that a particular resource or account is behaving abusively and is required to investigate.
Do you have concerns about security? Get in touch with us.
We’re always happy to answer any questions or concerns about security you might have. If you are a Ghost Inspector customer (or potential customer) and have further questions about security, just visit our Support page.
Contacting Ghost Inspector Securely
If you’ve found a security vulnerability in a Ghost Inspector website or service, please send an email to our security team at security@ghostinspector.com. Your email will be promptly reviewed and we will respond. We request that you not publicly disclose the issue until it has been addressed by us. We do attempt to reward responsible security reports that are sent to us. You can find more details about this on our Bug Bounty Program page.
If you choose to contact our security team, you can encrypt with PGP or the free alternative GnuPG. Our PGP key is listed below. This key is also registered with the MIT Public Key Server. You may use this key to encrypt your communications with Ghost Inspector.
Once you’ve imported our key, you can verify the signature of emails we send you by running gpg --verify
.
User name: Ghost Inspector Security <security@ghostinspector.com> Key ID: 72552D9F Key
fingerprint: B310 EE5E CD96 6EF9 8743 776C 92F0 9C99 7255 2D9F Expiration date: April 28, 2028
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGYorfEBEACpk8Py496M7uFcHrAFBV+Okc0UM5tLg3RqzjIafoLRoQMYMmI0
0EM7QP46zxs1UO38nHU/KRk4xZF3MdYG/tM3aHeqFWNRlOVcPF7SUdymz4ZtbDrc
Yq6oBW1GYMKGtRS/xxEvQ8zp+3L+sRqtIjjVSsTMIJ/pZqUFy7yThr5Svpq9aALO
UdoZRJLqMr1E/gIr66k97Af5yYlxanBfNl2pMMhTfDBTi+bErO3XbUpIgIZEfetu
tNPoenGBFjnh1N72ZTRHVaLCQAjUTLvnTugIhfg6iCFs/j8rt7PjnUf1nMT7sgoX
6j9h8fXyc69cZcVq1ytCtlQwsLIl8NynBrlutBUyPJXuZ2auv11fSdLPxnHmYTGl
dziLyw/qcYJiOJds899zTL+mZMQDEiL723PXz8c953tBumdQvE4S2rirmBlDC3os
mZImqb0TibOTLWgwblGFl+oO7F2dsUdkfUvj/S3dRVYo5LNgX6fT9TJsSb7R9nA6
ji9ejbhEAaG3NUs29P081Xyr+3+SRRP5DVJW6UuHKNo8FYeWRhp3sF5QqUcCmQbd
Q0VQxV9OLd0vBTVYKjLvkOGNPZaZSvQx0VQZQibsg92/7dhx6qN7dfC/qIBaIn8v
jYMY+X8kYXeAh51f1KfaAriV7fSSx3b1TI24z7FXJ0anND24SvpUs+D8xQARAQAB
tDZHaG9zdCBJbnNwZWN0b3IgU2VjdXJpdHkgPHNlY3VyaXR5QGdob3N0aW5zcGVj
dG9yLmNvbT6JAlQEEwEIAD4WIQSzEO5ezZZu+YdDd2yS8JyZclUtnwUCZiit8QIb
AwUJB4YfMQULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRCS8JyZclUtn8/AEACQ
b+9gxfECmdpep//iLIBkfg5NnIl3HVqNKJ1OrzrsIl31a7euuB6oOtDRE2YwgN5x
h7BPmZVU+wjZjcplysXbPPX72Vii7wCVD3cGBFc0+BRg1SeSbTl6OUFWx1/vXXyg
brEaJHj/qL0RyOBvjsHgB7t0pZUsSYTbZX0bauyNTZpME7uRCgHAWfKvsw9uxe6T
9abTmn+qo6/GBEvlQenx4kAhZKiGjlerCbab3IOAN5DOxEMbHw/EBX6Hv6wJKWq0
rrgcYafVfEdsnrzuGL1vnEJUTpUUSFuWqDHhaIcoy9aECInv7neUW9zySj/1BAPO
7lmrfFXUO7oLmdRbLY3lIar9RihEni8yBqN4pNpuLfWc7zAC3K849LRLPW+WnKOr
a13B3uAQRTcwtFEWc4QJTVpsV+neAkTJotX3BA9FCFWifqh1lNdQpUuV7wiJz+8x
Mm3U+t+aNbS9855APxIK2fMwCamZzDUdbDweFEkTuo9M0v9YBIyYDjf9xtmgsHcZ
U0pRPdUSsr4BY1XLQMkBZ66QmM2iZa4oWZDn9H9huVNrQ7m+oR1/X13kZn/oJUW+
8vA5STJtM/AcjsrH8aJ7erv2dlL4pjnCQB+uQ1kNzWHzlvgomWEi58uidk/ZVq3H
wPpdzgvLB8iP9QvXaJ4mUdmJu6EBXYuvdHqzsbj+bbkCDQRmKK3xARAA5MBUIzQR
a4aP7VMmx613l33UrJJcs5mNcRuLU3qeg2FpYeUoPCYstaVHI84wnFRJd45EwxMJ
gpnZDADfUCN/HNufb0bphSf+QXxeBuh3C6sAy0WFpMFQ+epOb3YHO4YSiapHjlen
Rec2Bq6jdoyxewCS1zdG4jeWM4hX/DHCLagCmaQ0wEP+jZM5k4TERlSi8i8HZzr3
vWQDIENjYYtZgt8WGXrb6B58QMwVzCQDnQO47iMXwZrgdNJTlJprAVwQd3pGGTCF
dUkjzap4NVpPHPB8rh9Hk+Uk5lqEoEPqWV9/Hx4VNeURtSKbCHp0cHE8KuCaRv9I
jDPh4IP3t/8DB43P8cKBNjPnBbaYzlr/pgUXS8+ChHe+Pzlk89mdxHApKT5XKtiq
+0lvqYdbGR+I7mhQH6jzqu3MLoOHEyjrQyqEaP5m9gECN04B6+2Yo7pyc8w0dgrf
UU4DJxMmi/lXeo53ABKjVScTvae34KVBlpcE7lRE9++TT3aIZNGN+NmMZl2Iu+tq
CIvvaVf/9P4Ti+mmZ2oDOk/YwS/zbnTFgIGzjz4+cDPBs5ZyQsOUPvrNJAttiuhx
Hwu9Qvf6lVVCKj0oNA6vo8OtkZUkkpNkLcrygt+E1sXD1f8U42VoD8QqlGZQLqez
c3xj8ax1nwgGB1KFdf/gUmG5rSEy8CaVaGEAEQEAAYkCPAQYAQgAJhYhBLMQ7l7N
lm75h0N3bJLwnJlyVS2fBQJmKK3xAhsMBQkHhh8xAAoJEJLwnJlyVS2fAl4P/jOU
7Nv3pd7tLBkOGVWge6317RL8nuh8LHBodCUchw4OJrJQlc65FTEAsrDhbU/kOoo5
S5xsNcb5+5gRzAG6DGUTj9yVTDC8CBli0gfV9DoFdG0YoZIinQpvj+1Vau6fhDNp
TeNGUDOLGGP6U5VNBIczMAiHP6KYpLVqA/aYTH7oNrPFnKt4OUeWQCQxWvtFqmvW
Opj6YyhNFLnD3ZUwfVzmr4PHx4+BV5+eWeKD5dUdN89HK5vyMikLqVC+p1s9WTzS
ZCFWF7SObHu4ixjTUnDNq9RrVGbUtiz+M0RoFRXZJKpm+40uZLRDqoK67+QOD9uD
NtKQ00fcFC+zZHrKljBPZh+nlW3uQRwtosY9mq+Ii2v97piyHdkp7U9oFb97/8Ey
yk0kNEFbYJN5swfrmHEXBShrCdjwTG3pPwNQy2l80uVnCCtJ8Dl7orVA92qXOI7o
UluqAk+Sei3T+oEtt69SCdGmb7wk1Dxc0hIK9mK3dU5dWDn85CJKkUkcH/3QXnzT
ov8SXPjQCIT9e0aF9FQY91/OZdXwv7Bwbxjhgut3geylr5cu9BbPS5rv1jkG3pOq
sUkyEjTbvVatBhotvJZzuSIDumzxXzWt20SIhR8KJVJ6FC4FB2GHCax79IepMuBE
UrGAlCdGjqC8y8CX9u1OdjXxhovmPnzdBJg7sfZn
=MwC/
-----END PGP PUBLIC KEY BLOCK-----