Mitigation Strategy: Input Validation and Sanitization - Leverage Yii2's Built-in Validation Rules
- Description:
- Define Validation Rules in Models: For each model handling user input, define comprehensive validation rules within the
rules()
method. Utilize Yii2's built-in validators (e.g.,required
,string
,integer
,email
,url
,date
,boolean
,unique
,exist
, custom validators). Specify data types, lengths, formats, allowed values, and constraints for each input attribute. - Apply Validation in Controllers/Actions: In controllers/actions processing user input, call
$model->validate()
before further logic. Handle validation errors appropriately using$model->getErrors()
.
- Define Validation Rules in Models: For each model handling user input, define comprehensive validation rules within the
- Threats Mitigated:
- SQL Injection (Medium): Indirectly reduces risk by ensuring data types and formats, preventing malicious SQL code injection.
- Cross-Site Scripting (XSS) (Low): Indirectly mitigates XSS by ensuring input data conforms to expected formats.
- Data Integrity Issues (High): Prevents invalid data storage, ensuring data consistency.
- Application Logic Errors (Medium): Reduces errors from processing invalid input.
- Impact:
- SQL Injection: Medium
- Cross-Site Scripting: Low
- Data Integrity Issues: High
- Application Logic Errors: Medium
- Currently Implemented: Partially implemented in
app\models\ContactForm.php
andapp\models\User.php
. Basic validation rules are defined in model layer. - Missing Implementation: Missing comprehensive validation rules in API endpoints (
app\controllers\ApiController.php
) and incomplete rules for complex models likeapp\models\Product.php
andapp\models\Order.php
. Missing validation in custom form requests.
Mitigation Strategy: Output Encoding and Sanitization with HtmlPurifier
- Description:
- Install HtmlPurifier: Install
yiisoft/yii2-htmlpurifier
extension via Composer:composer require yiisoft/yii2-htmlpurifier
. - Sanitize Output in Views: In view files, use
yii\helpers\HtmlPurifier::process($output)
to sanitize output containing user-generated content before displaying it in HTML. - Set
defaultHtmlEncode
in View Component: Configure theview
component inconfig/web.php
orconfig/main.php
to enabledefaultHtmlEncode: true
for automatic HTML-encoding by default.
- Install HtmlPurifier: Install
- Threats Mitigated:
- Cross-Site Scripting (XSS) (High): Effectively prevents XSS attacks by sanitizing HTML output.
- Impact:
- Cross-Site Scripting: High
- Currently Implemented:
HtmlPurifier
is used inapp\views\site\contact.php
.defaultHtmlEncode
is set totrue
inconfig/web.php
. Implemented in view layer and configuration. - Missing Implementation:
HtmlPurifier
is not consistently applied across all views, especially in user profile pages (app\views\user\profile.php
) and admin panels. Missing sanitization in API responses returning HTML content.
Mitigation Strategy: Parameterized Queries and Active Record/Query Builder
- Description:
- Use Active Record for Database Interactions: Primarily utilize Yii2's Active Record for database operations, which inherently use parameterized queries.
- Use Query Builder for Complex Queries: Leverage Yii2's Query Builder for complex queries, also supporting parameter binding.
- Parameter Binding with Raw SQL (If Necessary): If raw SQL is needed, use parameter binding with placeholders and
bindValues()
/bindValue()
methods of the command object.
- Threats Mitigated:
- SQL Injection (High): Effectively prevents SQL injection attacks by treating user input as data, not SQL code.
- Impact:
- SQL Injection: High
- Currently Implemented: Active Record and Query Builder are used throughout the application in models and controllers. Parameterized queries are implicitly used. Implemented in model and controller layers.
- Missing Implementation: Refactor raw SQL queries in legacy code within
app\components\DataProcessor.php
to use parameterized queries or Query Builder.
Mitigation Strategy: CSRF Protection
- Description:
- Enable CSRF Validation in Configuration: Ensure CSRF protection is enabled in
config/web.php
orconfig/main.php
by setting'enableCsrfValidation' => true
in therequest
component. - Use
Html::beginForm()
orActiveForm::begin()
for Forms: Use Yii2'sHtml::beginForm()
orActiveForm::begin()
to generate forms, automatically including CSRF tokens. - Handle AJAX Requests (If Necessary): For AJAX requests modifying data, include the CSRF token from
Yii::$app->request->csrfToken
in headers or POST data.
- Enable CSRF Validation in Configuration: Ensure CSRF protection is enabled in
- Threats Mitigated:
- Cross-Site Request Forgery (CSRF) (High): Prevents CSRF attacks by validating requests originate from legitimate users.
- Impact:
- Cross-Site Request Forgery: High
- Currently Implemented: CSRF validation is enabled in
config/web.php
.ActiveForm::begin()
is used for most forms. Implemented in configuration and view layer. - Missing Implementation: CSRF token is not included in AJAX requests from custom JavaScript in the admin panel. AJAX calls need to be updated to include CSRF tokens.
Mitigation Strategy: Robust Authentication and Authorization (RBAC)
- Description:
- Implement Authentication using Yii2's
User
Component: Utilize Yii2'sUser
component for authentication. Configure it inconfig/web.php
orconfig/main.php
, specifying the identity class. Implement authentication logic in the identity class and login/logout actions usingYii::$app->user->login()
andYii::$app->user->logout()
. UseYii::$app->security
for password hashing. - Implement Role-Based Access Control (RBAC) using Yii2's AuthManager: Set up Yii2's AuthManager for RBAC in
config/web.php
orconfig/main.php
. Define roles, permissions, and rules. Assign roles to users. UseYii::$app->user->can()
for authorization checks. - Session Management Security: Configure session settings in
config/web.php
orconfig/main.php
within thesession
component. Set secure cookie parameters and consider session timeouts. Regenerate session IDs after login usingYii::$app->session->regenerateID(true)
.
- Implement Authentication using Yii2's
- Threats Mitigated:
- Unauthorized Access (High): RBAC and authentication prevent unauthorized access to resources.
- Account Takeover (High): Secure password storage and session management reduce account takeover risk.
- Privilege Escalation (Medium): RBAC prevents privilege escalation through granular access control.
- Impact:
- Unauthorized Access: High
- Account Takeover: High
- Privilege Escalation: Medium
- Currently Implemented: Basic authentication using Yii2's
User
component and password hashing is implemented. Session cookies are set tohttpOnly: true
. Implemented in model, controller, configuration, and view layers. - Missing Implementation: Proper RBAC system using Yii2's AuthManager is missing. Access control is currently based on simple role checks. Session regeneration after login is missing.
Mitigation Strategy: Error Handling and Debugging in Production
- Description:
- Disable Debug Mode in Production: Disable debug mode (
YII_DEBUG
) in production by settingYII_DEBUG
tofalse
in server environment variables or application entry point. - Configure Error Handling in
config/web.php
orconfig/main.php
: Customize theerrorHandler
component. SeterrorAction
and configure error logging using thelog
component. - Display Generic Error Pages in Production: Render generic, user-friendly error pages in the error action (
site/error
) instead of detailed error messages.
- Disable Debug Mode in Production: Disable debug mode (
- Threats Mitigated:
- Information Disclosure (Medium): Prevents attackers from gaining sensitive information through detailed error messages exposed in debug mode.
- Impact:
- Information Disclosure: Medium
- Currently Implemented: Debug mode is disabled in production.
errorHandler
is configured to use'site/error'
action. Generic error page is displayed. Implemented in configuration and server environment. - Missing Implementation: Integration with a dedicated error tracking system (e.g., Sentry, Rollbar) is missing for more effective error monitoring.
Mitigation Strategy: Gii and Debug Toolbar Security
- Description:
- Disable Gii in Production: Disable Gii module in production by removing or commenting out its configuration in
config/web.php
orconfig/main.php
. - Disable Debug Toolbar in Production: Disable the debug toolbar module in production by removing or commenting out its configuration in
config/web.php
orconfig/main.php
. - Restrict Access to Gii in Development/Staging (Optional): Restrict access to Gii in development/staging using IP address restrictions or authentication in the Gii module configuration.
- Disable Gii in Production: Disable Gii module in production by removing or commenting out its configuration in
- Threats Mitigated:
- Information Disclosure (Medium): Prevents exposure of sensitive information through Gii and debug toolbar in production.
- Remote Code Execution (Low): Eliminates potential RCE risk associated with Gii.
- Unauthorized Code Generation/Modification (Medium): Prevents misuse of Gii for code manipulation in production.
- Impact:
- Information Disclosure: Medium
- Remote Code Execution: Low
- Unauthorized Code Generation/Modification: Medium
- Currently Implemented: Gii and debug toolbar modules are commented out in
config/web.php
for production. Disabled in production configuration. - Missing Implementation: Access to Gii is not restricted in the development environment. IP address restrictions or authentication should be implemented for Gii in development and staging.