AI agents: the content index is at /llms.txt. Every page is also available as Markdown — send the request header Accept: text/markdown, or append .md to the page URL.
Xperience Docs

Cookie consent

We use necessary cookies (opens in a new tab) to run our website and improve your experience while browsing. Additional cookies are only used with your consent. You may revoke your consent on the Cookies Policy (opens in a new tab) page or in your browser at any time.

Configure (opens in a new tab)
  • Documentation
    InstallationUsing the Xperience interfaceDeveloping websitesConfiguring XperienceManaging usersSecuring websitesDeploying websitesManaging website contentMultilingual websitesMacro expressionsExternal utilitiesIntegrating 3rd party systemsCustom developmentE-commerce featuresOn-line marketing featuresRelease notes - Xperience 13Xperience terminology glossary
  • Tutorial
    Using the Xperience interfaceDeveloper tutorialBusiness tutorialResource hub for marketers
  • API Examples
    ConfigurationContent managementDevelopmentE-commerceOn-line marketingSocial media
  1. Home
  2. Securing websites
  3. Security checklists
  4. Security checklist - developing a website

Security checklist - developing a website


Was this page helpful?

Send us feedback Go back to top
  • Community Questions & Answers (opens in a new tab)
  • Contact support (opens in a new tab)

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.