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 server side as well as on 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 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.  | 
|
| 
 View state mac validation is enabled globally in the web.config file. 
 | 
|
| 
 LDAP injection  | 
|
| 
 User inputs for LDAP queries are sanitized before execution.  | 
|
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 is checked upon file upload.  | 
|
| 
 Logging  | 
|
| 
 All critical activities in the website are logged.  | 
|
| 
 The website does not allow unhandled exceptions to occur.  | 
|