Repository navigation
Security Hardening
sebiboga edited this page Aug 16, 2026
·
1 revision
Security fixes and improvements applied to TestLink v1.9.20.
SQL injection vulnerabilities in search functionality.
- Date field validation (creationdatefrom)
- User filter fields (createdby, editedby)
- Advanced search filters
function validateDate($dateToValidate, $format = 'Y-m-d')
{
$d = DateTime::createFromFormat($format, $dateToValidate);
return $d && $d->format($format) === $dateToValidate;
}- Test case search
- Advanced search filters
- Result filters
- Date range inputs
Cross-Site Request Forgery vulnerability in role management.
// Only non-system roles can be deleted
if($args->roleid > TL_LAST_SYSTEM_ROLE) {
$userFeedback = deleteRole($db, $args->roleid);
checkSessionValid($db); // Refresh user session
}- System roles protected (IDs 1-4)
- Custom roles deletable
- Session validation after operations
Proper type casting for PHP 8 compatibility:
// Safe array operations
$items = (array)$query_result;
$count = count($items); // Never throws TypeError
// Using helper functions
$count = tlCount($items); // Returns 0 for non-arrays
$items = tlEnsureCountable($data); // Guarantees arrayAll potential null inputs are validated:
if(!is_null($value) && is_array($value)) {
process($value);
}- Always validate user input
- Use type casting for safety
- Check for null values before processing
- Use parameterized queries
- Validate date/number inputs
- Escape string values
- Check session validity
- Verify role permissions
- Log security operations
- Don't expose sensitive information
- Log security events
- Return generic error messages to users
1' OR '1'='1
'); DROP TABLE users; --
1 UNION SELECT * FROM users
Should all be rejected or properly escaped.
Attempt operations without valid session should fail.
Send invalid data types to ensure proper handling.
- Validate all user input
- Use type-safe functions
- Check role permissions
- Validate dates and numbers
- Log security operations
- Review error messages
- Test with malicious input
- MySQL-Timestamp-Compatibility - Database safety
- PHP81-Compatibility - Type safety
- PHP82-Compatibility - Modern PHP support
Status: ✅ Hardened
Issues: #172 (SQL Injection), #174 (CSRF), #179 (Input Validation)