Completed
Push — 16145-Improve-Installer ( 55c7bc...c82547 )
by Shawn
02:25
created

EnvironmentController::store()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 10
rs 9.4285
cc 1
eloc 6
nc 1
nop 1
1
<?php
2
3
namespace SET\Http\Controllers\Installation;
4
5
use Exception;
6
use Illuminate\Http\Request;
7
use Illuminate\Support\Facades\Artisan;
8
use RachidLaasri\LaravelInstaller\Helpers\EnvironmentManager;
9
use SET\Http\Controllers\Controller;
10
11
class EnvironmentController extends Controller
12
{
13
    /**
14
     * @var EnvironmentManager
15
     */
16
    protected $EnvironmentManager;
17
    protected $envPath;
18
    protected $envSetup = [
19
        'APP_ENV' => FILTER_SANITIZE_ENCODED,
20
        'APP_DEBUG' => FILTER_SANITIZE_ENCODED,
21
        'APP_KEY' => FILTER_DEFAULT,
22
        'APP_URL' => FILTER_VALIDATE_URL,
23
        'DB_CONNECTION' => FILTER_SANITIZE_ENCODED,
24
        'DB_HOST' => FILTER_SANITIZE_ENCODED,
25
        'DB_DATABASE' => FILTER_SANITIZE_ENCODED,
26
        'DB_USERNAME' => FILTER_SANITIZE_ENCODED,
27
        'DB_PASSWORD' => FILTER_DEFAULT,
28
        'MAIL_DRIVER' => FILTER_SANITIZE_ENCODED,
29
        'MAIL_HOST' => FILTER_SANITIZE_ENCODED,
30
        'MAIL_PORT' => FILTER_VALIDATE_INT,
31
        'MAIL_USERNAME' => FILTER_SANITIZE_ENCODED,
32
        'MAIL_PASSWORD' => FILTER_DEFAULT,
33
        'MAIL_ENCRYPTION' => FILTER_SANITIZE_ENCODED,
34
        'MAIL_FROM_ADDRESS' => FILTER_VALIDATE_EMAIL,
35
        'MAIL_FROM_NAME' => FILTER_DEFAULT,
36
    ];
37
38
    /**
39
     * @param EnvironmentManager $environmentManager
40
     */
41
    public function __construct(EnvironmentManager $environmentManager)
42
    {
43
        $this->EnvironmentManager = $environmentManager;
44
        $this->envPath = base_path('.env');
45
    }
46
47
    /**
48
     * Display the Environment page.
49
     *
50
     * @return \Illuminate\View\View
51
     */
52
    public function index()
53
    {
54
        $envConfig = $this->EnvironmentManager->getEnvContent();
55
        $fields = $this->breakApartEnv($envConfig);
56
57
        return view('vendor.installer.environment', compact('fields'));
58
    }
59
60
    /**
61
     * Processes the newly saved environment configuration and redirects back.
62
     *
63
     * @param Request $input
64
     *
65
     * @return \Illuminate\Http\RedirectResponse
66
     */
67
    public function store(Request $input)
68
    {
69
        $env = $this->flattenRequest($input);
70
        $message = $this->saveFile($env);
71
72
        Artisan::call('key:generate');
73
74
        return redirect()->route('LaravelInstaller::requirements')
75
            ->with(['message' => $message]);
76
    }
77
78
    /**
79
     * Key should be before the first = symbol and value should be after.
80
     * Each new line (\r\n) should be a new array entry.
81
     *
82
     * @param $string
83
     *
84
     * @return array
85
     */
86
    private function breakApartEnv($string)
87
    {
88
        preg_match_all('/([^=]*?)=([^\r\n]*?)[\r\n]+/', $string, $matches);
89
90
        $array = array_combine($matches[1], $matches[2]);
91
        $array['MAIL_FROM_NAME'] = $this->removeQuotes($array['MAIL_FROM_NAME']);
92
93
        return $array;
94
    }
95
96
    private function flattenRequest(Request $input)
97
    {
98
        $fields = $this->breakApartEnv($this->EnvironmentManager->getEnvContent());
99
        $results = $this->scrubInput(array_merge($fields, $input->toArray()));
100
        $results['MAIL_FROM_NAME'] = '"'.$this->removeQuotes($results['MAIL_FROM_NAME']).'"';
101
102
        $env = '';
103
        foreach ($results as $key => $value) {
104
            $env .= $key.'='.$value."\r\n";
105
        }
106
107
        return $env;
108
    }
109
110
    /**
111
     * Save the edited content to the file.
112
     *
113
     * @param $string
114
     *
115
     * @return string
116
     */
117
    public function saveFile($string)
118
    {
119
        $message = trans('messages.environment.success');
120
121
        try {
122
            file_put_contents($this->envPath, $string);
1 ignored issue
show
Security File Manipulation introduced by
$string can contain request data and is used in file manipulation context(s) leading to a potential security vulnerability.

8 paths for user data to reach this point

  1. Path: $this->parameters['HTTP_AUTHORIZATION'] seems to return tainted data, and $authorizationHeader is assigned in ServerBag.php on line 62
  1. $this->parameters['HTTP_AUTHORIZATION'] seems to return tainted data, and $authorizationHeader is assigned
    in vendor/ServerBag.php on line 62
  2. ParameterBag::$parameters is assigned
    in vendor/ServerBag.php on line 77
  3. Tainted property ParameterBag::$parameters is read
    in vendor/ParameterBag.php on line 45
  4. ParameterBag::all() returns tainted data, and $files is assigned
    in vendor/src/Illuminate/Http/Request.php on line 431
  5. Data is passed through array_map()
    in vendor/src/Illuminate/Http/Request.php on line 454
  6. Request::$convertedFiles is assigned
    in vendor/src/Illuminate/Http/Request.php on line 435
  7. Tainted property Request::$convertedFiles is read
    in vendor/src/Illuminate/Http/Request.php on line 434
  8. Request::allFiles() returns tainted data, and $this->allFiles() is passed through array_replace_recursive()
    in vendor/src/Illuminate/Http/Request.php on line 323
  9. Request::all() returns tainted data
    in vendor/src/Illuminate/Http/Request.php on line 1015
  10. Request::toArray() returns tainted data, and $input->toArray() is passed through array_merge()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  11. Data is passed through filter_var_array()
    in vendor/app/Http/Controllers/Installation/EnvironmentController.php on line 139
  12. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  13. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 100
  14. $key is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 103
  15. $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 104
  16. EnvironmentController::flattenRequest() returns tainted data, and $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 69
  17. $env is passed to EnvironmentController::saveFile()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 70
  2. Path: Read from $_POST, and $_POST is passed to Request::createRequestFromFactory() in Request.php on line 281
  1. Read from $_POST, and $_POST is passed to Request::createRequestFromFactory()
    in vendor/Request.php on line 281
  2. $request is passed to Request::__construct()
    in vendor/Request.php on line 1939
  3. $request is passed to Request::initialize()
    in vendor/Request.php on line 222
  4. $request is passed to ParameterBag::__construct()
    in vendor/Request.php on line 240
  5. ParameterBag::$parameters is assigned
    in vendor/ParameterBag.php on line 35
  6. Tainted property ParameterBag::$parameters is read
    in vendor/ParameterBag.php on line 45
  7. ParameterBag::all() returns tainted data, and $files is assigned
    in vendor/src/Illuminate/Http/Request.php on line 431
  8. Data is passed through array_map()
    in vendor/src/Illuminate/Http/Request.php on line 454
  9. Request::$convertedFiles is assigned
    in vendor/src/Illuminate/Http/Request.php on line 435
  10. Tainted property Request::$convertedFiles is read
    in vendor/src/Illuminate/Http/Request.php on line 434
  11. Request::allFiles() returns tainted data, and $this->allFiles() is passed through array_replace_recursive()
    in vendor/src/Illuminate/Http/Request.php on line 323
  12. Request::all() returns tainted data
    in vendor/src/Illuminate/Http/Request.php on line 1015
  13. Request::toArray() returns tainted data, and $input->toArray() is passed through array_merge()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  14. Data is passed through filter_var_array()
    in vendor/app/Http/Controllers/Installation/EnvironmentController.php on line 139
  15. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  16. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 100
  17. $key is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 103
  18. $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 104
  19. EnvironmentController::flattenRequest() returns tainted data, and $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 69
  20. $env is passed to EnvironmentController::saveFile()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 70
  3. Path: Read from $_SERVER, and $server is assigned in Request.php on line 271
  1. Read from $_SERVER, and $server is assigned
    in vendor/Request.php on line 271
  2. $server is passed to Request::createRequestFromFactory()
    in vendor/Request.php on line 281
  3. $server is passed to Request::__construct()
    in vendor/Request.php on line 1939
  4. $server is passed to Request::initialize()
    in vendor/Request.php on line 222
  5. $server is passed to ParameterBag::__construct()
    in vendor/Request.php on line 245
  6. ParameterBag::$parameters is assigned
    in vendor/ParameterBag.php on line 35
  7. Tainted property ParameterBag::$parameters is read
    in vendor/ParameterBag.php on line 45
  8. ParameterBag::all() returns tainted data, and $files is assigned
    in vendor/src/Illuminate/Http/Request.php on line 431
  9. Data is passed through array_map()
    in vendor/src/Illuminate/Http/Request.php on line 454
  10. Request::$convertedFiles is assigned
    in vendor/src/Illuminate/Http/Request.php on line 435
  11. Tainted property Request::$convertedFiles is read
    in vendor/src/Illuminate/Http/Request.php on line 434
  12. Request::allFiles() returns tainted data, and $this->allFiles() is passed through array_replace_recursive()
    in vendor/src/Illuminate/Http/Request.php on line 323
  13. Request::all() returns tainted data
    in vendor/src/Illuminate/Http/Request.php on line 1015
  14. Request::toArray() returns tainted data, and $input->toArray() is passed through array_merge()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  15. Data is passed through filter_var_array()
    in vendor/app/Http/Controllers/Installation/EnvironmentController.php on line 139
  16. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  17. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 100
  18. $key is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 103
  19. $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 104
  20. EnvironmentController::flattenRequest() returns tainted data, and $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 69
  21. $env is passed to EnvironmentController::saveFile()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 70
  4. Path: Fetching key HTTP_CONTENT_LENGTH from $_SERVER, and $server is assigned in Request.php on line 274
  1. Fetching key HTTP_CONTENT_LENGTH from $_SERVER, and $server is assigned
    in vendor/Request.php on line 274
  2. $server is passed to Request::createRequestFromFactory()
    in vendor/Request.php on line 281
  3. $server is passed to Request::__construct()
    in vendor/Request.php on line 1939
  4. $server is passed to Request::initialize()
    in vendor/Request.php on line 222
  5. $server is passed to ParameterBag::__construct()
    in vendor/Request.php on line 245
  6. ParameterBag::$parameters is assigned
    in vendor/ParameterBag.php on line 35
  7. Tainted property ParameterBag::$parameters is read
    in vendor/ParameterBag.php on line 45
  8. ParameterBag::all() returns tainted data, and $files is assigned
    in vendor/src/Illuminate/Http/Request.php on line 431
  9. Data is passed through array_map()
    in vendor/src/Illuminate/Http/Request.php on line 454
  10. Request::$convertedFiles is assigned
    in vendor/src/Illuminate/Http/Request.php on line 435
  11. Tainted property Request::$convertedFiles is read
    in vendor/src/Illuminate/Http/Request.php on line 434
  12. Request::allFiles() returns tainted data, and $this->allFiles() is passed through array_replace_recursive()
    in vendor/src/Illuminate/Http/Request.php on line 323
  13. Request::all() returns tainted data
    in vendor/src/Illuminate/Http/Request.php on line 1015
  14. Request::toArray() returns tainted data, and $input->toArray() is passed through array_merge()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  15. Data is passed through filter_var_array()
    in vendor/app/Http/Controllers/Installation/EnvironmentController.php on line 139
  16. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  17. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 100
  18. $key is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 103
  19. $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 104
  20. EnvironmentController::flattenRequest() returns tainted data, and $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 69
  21. $env is passed to EnvironmentController::saveFile()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 70
  5. Path: Fetching key HTTP_CONTENT_TYPE from $_SERVER, and $server is assigned in Request.php on line 277
  1. Fetching key HTTP_CONTENT_TYPE from $_SERVER, and $server is assigned
    in vendor/Request.php on line 277
  2. $server is passed to Request::createRequestFromFactory()
    in vendor/Request.php on line 281
  3. $server is passed to Request::__construct()
    in vendor/Request.php on line 1939
  4. $server is passed to Request::initialize()
    in vendor/Request.php on line 222
  5. $server is passed to ParameterBag::__construct()
    in vendor/Request.php on line 245
  6. ParameterBag::$parameters is assigned
    in vendor/ParameterBag.php on line 35
  7. Tainted property ParameterBag::$parameters is read
    in vendor/ParameterBag.php on line 45
  8. ParameterBag::all() returns tainted data, and $files is assigned
    in vendor/src/Illuminate/Http/Request.php on line 431
  9. Data is passed through array_map()
    in vendor/src/Illuminate/Http/Request.php on line 454
  10. Request::$convertedFiles is assigned
    in vendor/src/Illuminate/Http/Request.php on line 435
  11. Tainted property Request::$convertedFiles is read
    in vendor/src/Illuminate/Http/Request.php on line 434
  12. Request::allFiles() returns tainted data, and $this->allFiles() is passed through array_replace_recursive()
    in vendor/src/Illuminate/Http/Request.php on line 323
  13. Request::all() returns tainted data
    in vendor/src/Illuminate/Http/Request.php on line 1015
  14. Request::toArray() returns tainted data, and $input->toArray() is passed through array_merge()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  15. Data is passed through filter_var_array()
    in vendor/app/Http/Controllers/Installation/EnvironmentController.php on line 139
  16. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  17. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 100
  18. $key is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 103
  19. $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 104
  20. EnvironmentController::flattenRequest() returns tainted data, and $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 69
  21. $env is passed to EnvironmentController::saveFile()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 70
  6. Path: $server['HTTP_HOST'] seems to return tainted data, and $server is assigned in Request.php on line 347
  1. $server['HTTP_HOST'] seems to return tainted data, and $server is assigned
    in vendor/Request.php on line 347
  2. $server is assigned
    in vendor/Request.php on line 395
  3. $server is assigned
    in vendor/Request.php on line 396
  4. $server is passed to Request::createRequestFromFactory()
    in vendor/Request.php on line 398
  5. $server is passed to Request::__construct()
    in vendor/Request.php on line 1939
  6. $server is passed to Request::initialize()
    in vendor/Request.php on line 222
  7. $server is passed to ParameterBag::__construct()
    in vendor/Request.php on line 245
  8. ParameterBag::$parameters is assigned
    in vendor/ParameterBag.php on line 35
  9. Tainted property ParameterBag::$parameters is read
    in vendor/ParameterBag.php on line 45
  10. ParameterBag::all() returns tainted data, and $files is assigned
    in vendor/src/Illuminate/Http/Request.php on line 431
  11. Data is passed through array_map()
    in vendor/src/Illuminate/Http/Request.php on line 454
  12. Request::$convertedFiles is assigned
    in vendor/src/Illuminate/Http/Request.php on line 435
  13. Tainted property Request::$convertedFiles is read
    in vendor/src/Illuminate/Http/Request.php on line 434
  14. Request::allFiles() returns tainted data, and $this->allFiles() is passed through array_replace_recursive()
    in vendor/src/Illuminate/Http/Request.php on line 323
  15. Request::all() returns tainted data
    in vendor/src/Illuminate/Http/Request.php on line 1015
  16. Request::toArray() returns tainted data, and $input->toArray() is passed through array_merge()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  17. Data is passed through filter_var_array()
    in vendor/app/Http/Controllers/Installation/EnvironmentController.php on line 139
  18. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  19. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 100
  20. $key is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 103
  21. $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 104
  22. EnvironmentController::flattenRequest() returns tainted data, and $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 69
  23. $env is passed to EnvironmentController::saveFile()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 70
  7. Path: $this->parameters['PHP_AUTH_USER'] seems to return tainted data, and $headers is assigned in ServerBag.php on line 43
  1. $this->parameters['PHP_AUTH_USER'] seems to return tainted data, and $headers is assigned
    in vendor/ServerBag.php on line 43
  2. $headers is assigned
    in vendor/ServerBag.php on line 44
  3. ServerBag::getHeaders() returns tainted data, and $this->server->getHeaders() is passed to HeaderBag::__construct()
    in vendor/Request.php on line 246
  4. $values is assigned
    in vendor/HeaderBag.php on line 31
  5. $values is passed to HeaderBag::set()
    in vendor/HeaderBag.php on line 32
  6. (array) $values is passed through array_values(), and $values is assigned
    in vendor/HeaderBag.php on line 142
  7. HeaderBag::$headers is assigned
    in vendor/HeaderBag.php on line 145
  8. Tainted property HeaderBag::$headers is read
    in vendor/HeaderBag.php on line 125
  9. HeaderBag::get() returns tainted data, and $requestUri is assigned
    in vendor/Request.php on line 1709
  10. $requestUri is passed to ParameterBag::set()
    in vendor/Request.php on line 1740
  11. ParameterBag::$parameters is assigned
    in vendor/ParameterBag.php on line 99
  12. Tainted property ParameterBag::$parameters is read
    in vendor/ParameterBag.php on line 45
  13. ParameterBag::all() returns tainted data, and $files is assigned
    in vendor/src/Illuminate/Http/Request.php on line 431
  14. Data is passed through array_map()
    in vendor/src/Illuminate/Http/Request.php on line 454
  15. Request::$convertedFiles is assigned
    in vendor/src/Illuminate/Http/Request.php on line 435
  16. Tainted property Request::$convertedFiles is read
    in vendor/src/Illuminate/Http/Request.php on line 434
  17. Request::allFiles() returns tainted data, and $this->allFiles() is passed through array_replace_recursive()
    in vendor/src/Illuminate/Http/Request.php on line 323
  18. Request::all() returns tainted data
    in vendor/src/Illuminate/Http/Request.php on line 1015
  19. Request::toArray() returns tainted data, and $input->toArray() is passed through array_merge()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  20. Data is passed through filter_var_array()
    in vendor/app/Http/Controllers/Installation/EnvironmentController.php on line 139
  21. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  22. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 100
  23. $key is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 103
  24. $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 104
  25. EnvironmentController::flattenRequest() returns tainted data, and $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 69
  26. $env is passed to EnvironmentController::saveFile()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 70
  8. Path: $this->parameters['PHP_AUTH_PW'] seems to return tainted data, and $headers is assigned in ServerBag.php on line 44
  1. $this->parameters['PHP_AUTH_PW'] seems to return tainted data, and $headers is assigned
    in vendor/ServerBag.php on line 44
  2. ServerBag::getHeaders() returns tainted data, and $this->server->getHeaders() is passed to HeaderBag::__construct()
    in vendor/Request.php on line 246
  3. $values is assigned
    in vendor/HeaderBag.php on line 31
  4. $values is passed to HeaderBag::set()
    in vendor/HeaderBag.php on line 32
  5. (array) $values is passed through array_values(), and $values is assigned
    in vendor/HeaderBag.php on line 142
  6. HeaderBag::$headers is assigned
    in vendor/HeaderBag.php on line 145
  7. Tainted property HeaderBag::$headers is read
    in vendor/HeaderBag.php on line 125
  8. HeaderBag::get() returns tainted data, and $requestUri is assigned
    in vendor/Request.php on line 1709
  9. $requestUri is passed to ParameterBag::set()
    in vendor/Request.php on line 1740
  10. ParameterBag::$parameters is assigned
    in vendor/ParameterBag.php on line 99
  11. Tainted property ParameterBag::$parameters is read
    in vendor/ParameterBag.php on line 45
  12. ParameterBag::all() returns tainted data, and $files is assigned
    in vendor/src/Illuminate/Http/Request.php on line 431
  13. Data is passed through array_map()
    in vendor/src/Illuminate/Http/Request.php on line 454
  14. Request::$convertedFiles is assigned
    in vendor/src/Illuminate/Http/Request.php on line 435
  15. Tainted property Request::$convertedFiles is read
    in vendor/src/Illuminate/Http/Request.php on line 434
  16. Request::allFiles() returns tainted data, and $this->allFiles() is passed through array_replace_recursive()
    in vendor/src/Illuminate/Http/Request.php on line 323
  17. Request::all() returns tainted data
    in vendor/src/Illuminate/Http/Request.php on line 1015
  18. Request::toArray() returns tainted data, and $input->toArray() is passed through array_merge()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  19. Data is passed through filter_var_array()
    in vendor/app/Http/Controllers/Installation/EnvironmentController.php on line 139
  20. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 99
  21. $results is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 100
  22. $key is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 103
  23. $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 104
  24. EnvironmentController::flattenRequest() returns tainted data, and $env is assigned
    in app/Http/Controllers/Installation/EnvironmentController.php on line 69
  25. $env is passed to EnvironmentController::saveFile()
    in app/Http/Controllers/Installation/EnvironmentController.php on line 70

General Strategies to prevent injection

In general, it is advisable to prevent any user-data to reach this point. This can be done by white-listing certain values:

if ( ! in_array($value, array('this-is-allowed', 'and-this-too'), true)) {
    throw new \InvalidArgumentException('This input is not allowed.');
}

For numeric data, we recommend to explicitly cast the data:

$sanitized = (integer) $tainted;
Loading history...
123
        } catch (Exception $e) {
124
            $message = trans('messages.environment.errors');
125
        }
126
127
        return $message;
128
    }
129
130
    private function removeQuotes($string)
131
    {
132
        $string = str_replace('"', '', $string);
133
134
        return str_replace("'", '', $string);
135
    }
136
137
    private function scrubInput($array)
138
    {
139
        $array = filter_var_array($array, $this->envSetup);
140
        foreach ($array as $key => $value) {
141
            if( !in_array($key, array_keys($this->envSetup))) {
142
                unset($array[$key]);
143
            }
144
        }
145
        return $array;
146
    }
147
}
148