Building secure web applications requires attention to common vulnerability patterns.
Never trust user input. Always validate and sanitize.
// Whitelist validation for expected values
function IsValidSection(s: String): Boolean;
begin
Result := s in ['lang', 'ref', 'examples'];
end;
var section := WebRequest.QueryField['section'];
if not IsValidSection(section) then begin
WebResponse.StatusCode := 400;
exit;
end; Always encode user data before rendering to HTML.
var userInput := WebRequest.QueryField['name'];
PrintLn('<p>Hello, ' + userInput.ToHtml + '</p>'); <p>Hello, </p>
Always use parameterized queries.
// CORRECT - Parameterized
var userId := WebRequest.QueryField['id'];
var db := DataBase.Create('SQLite', ['data.db']);
var results := db.Query(#'
SELECT * FROM users WHERE id = ?
', [userId]);
// WRONG - String concatenation (DO NOT USE)
// var results := db.Query('SELECT * FROM users WHERE id = ' + userId); Always whitelist redirect destinations to prevent Open Redirect vulnerabilities.
const AllowedTargets = ['/home', '/dashboard', '/logout'];
var target := WebRequest.QueryField['next'];
if target in AllowedTargets then
WebResponse.SetStatusRedirect(302, target); Use cryptographic tokens and secure cookie flags.
uses System.Net, System.Crypto;
var token := CryptographicToken(32);
// Flags: 2 = HttpOnly
WebResponse.SetCookie('session', token, Now + 1, '/', '', 2, WebCookieSameSite.Strict);