Secure coding practices for building safe TypeScript applications.
Security standards for .NET applications based on OWASP guidelines.
FluentValidation or DataAnnotations. Validate at API boundaries.HtmlEncoder for manual encoding.SameSite=Strict cookies.UseHttpsRedirection(). Enable HSTS in production.RateLimiter middleware (.NET 7+).[AllowAnonymous] on sensitive endpoints: Review all anonymous access.$"SELECT * FROM Users WHERE Id = {id}" is vulnerable.* CORS in production: Specify allowed origins explicitly.ServerCertificateCustomValidationCallback = (_, _, _, _) => true.// JWT Bearer configuration
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]!))
};
});
// Policy-based authorization
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
options.AddPolicy("CanEditOrder", policy =>
policy.Requirements.Add(new ResourceOwnerRequirement()));
});
// Parameterized query (safe from SQL injection)
var user = await connection.QuerySingleAsync<User>(
"SELECT * FROM Users WHERE Id = @Id AND Status = @Status",
new { Id = userId, Status = "Active" });
// Rate limiting
builder.Services.AddRateLimiter(options =>
{
options.AddFixedWindowLimiter("api", cfg =>
{
cfg.Window = TimeSpan.FromMinutes(1);
cfg.PermitLimit = 100;
});
});
For JWT patterns, Identity configuration, and security headers: See references/REFERENCE.md.
language | best-practices | aspnet-core
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer