- Regulate Request Method
- Make sure that your application accepts only the request methods that you expect (for examples, for GET requests: URLs, links; for POST request: forms) and ignores all overs
- Validating Input
- Is the input acceptable?
- Determine data expectations (preventing bugs, as well as hacks)
- Consider application and database requirements
- Regulate the data inputs to your application and only allow expected data
- Set good default values, default should prevail
- Common Validations
- Presence of data
- Length of data
- Type of data
- Format of the data
- Uniqueness
- Double check validation logic
- Search on a web for your programming language for “logical pitfalls”
- Sanitizing data
- It’s the most important step that can be taken toward more secure web server
- In order to neutralize the thread we should use type casting, not type juggling this way you maintain control over the process
- Sanitize any SQL, HTML, JavaScript, XML in general any data that you receiving, all power characters should be sanitizing, power characters depend on programming language you are using
- Add escape characters before powerful characters
- Do not write custom sanitization methods, use well tested, language specific functions instead
- Do not remove or correct invalid data, stick to encoding and escaping
- Consider where the data goes
- Consider where the data might go later
- Sanitize early and continue sanitize it constantly
- Labeling Data
- Use names to identify condition of data (for example dirty, raw, unsafe…), when we sanitize data variable names can be changed to “clean”,”filtered”,”safe”
- Keep Code Private
- Be sure that libraries directories are not accessible by the web server
- Web Server should be configured properly: set document root, allow/deny access for all directories/files and so on
- Keep Credential That Your Code Uses Private
- Plain text credentials are dangerous
- Keep them separate form code
- Keep credential file out of version control
- Have as few copies of password as necessary
- Don’t reuse passwords, passwords should be unique for each computer,database, environment
- Hash password whenever possible, public key cryptography is an excellent choice
- Keep Error Message Vague
- Turn off detailed error reporting for production server
- Return only generic error pages
- Configure web server to use same error pages
- Smart Logging
- Errors
- Sensitive actions
- Possible attacks
- Data worth logging:
- Date and Time
- Source (user, IP)
- Action
- Target
- Cookie
- Session
- URL and all parameters
- Backtrace
- Review logs routinely
- Don’t log sensitive data such as passwords , beware POST psarameters and database quires
- Filter out passwords, keys, tokens from logging
- Keep an old content, so it can be easily restored
Tag: Sanitizing data