Security checklist - developing a website
This is a design checklist – things you should keep in mind while developing websites.
User inputs
Check | Description |
User inputs are checked for type, length, and content. | |
User inputs with arithmetic operations are checked and validated for minimum and maximum values. | |
All user inputs are validated on the server-side as well as on the client-side. | |
Values stored in hidden form fields are validated properly. |
Attack prevention
Check | Description |
Cross-site scripting | |
User inputs are escaped and validated. | |
Content is encoded before it is rendered on a page. | |
Strings from external sources are encoded using the HTMLHelper.HTMLEncode() method. | |
URL parameters are sanitized using the QueryHelper.GetText() method. | |
Values from external sources rendered as part of JavaScript code are encoded using CMS.Base.Web.UI.ScriptHelper.GetString(). | |
Cookies are configured as HTTP-only. | |
SQL injection | |
SQL parameters are used for dynamic parts of SELECT, INSERT, UPDATE, and DELETE queries. | |
The exec() function is not used in SQL code. | |
Cross-site request forgery | |
Actions are performed using POST requests, not GET. | |
The ValidateAntiForgeryToken attribute is added to your action methods, and security tokens are generated by calling the @Html.AntiForgeryToken() method in your views that post to the action methods. | |
LDAP injection | |
User inputs for LDAP queries are sanitized before execution. | |
Unvalidated redirects and forwards | |
Any custom redirects to URLs obtained from untrusted inputs are validated. The System.Web.MVC.UrlHelper.IsLocalUrl method is used to validate inputs before performing redirects. |
Other issues
Check | Description |
User accounts are secured against all types of attacks. | |
Error messages in the UI are configured so that they show only basic information and the whole information is logged only into the Event log. | |
File upload | |
Name, length, type, and content of files are checked upon file upload. | |
Logging | |
All critical activities on the website are logged. | |
The website does not allow unhandled exceptions to occur. |