laravel-swoole icon indicating copy to clipboard operation
laravel-swoole copied to clipboard

Static resources via symlink no longer work

Open aftabnaveed opened this issue 4 years ago • 7 comments

Make sure you read Issues Guideline and answer these questions before submitting your issue. Thanks! (Any non-English issues will be closed immediately.)

  1. Please provide your PHP and Swoole version. (php -v and php --ri swoole)

PHP 8.0.3 (cli) (built: Mar 4 2021 05:33:14) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.3, Copyright (c) Zend Technologies

Swoole => enabled Author => Swoole Team [email protected] Version => 4.6.4 Built => Mar 30 2021 15:39:43

  1. Please provide your Laravel/Lumen version.

Laravel 8.

  1. Which release version of this package are you using?

  2. What did you do? If possible, provide a recipe for reproducing the error. Created a Symlink in /public folder and set SWOOLE_HANDLE_STATIC to true in .env

  3. What did you expect to see? Expected to be able to see the static file from a symlink

  4. What did you see instead? 404 Not Found

It looks like the following Merge broke the static resources served via symlink.

https://github.com/swooletw/laravel-swoole/commit/96a93e93b5a97a6aefa6b6dfa5e2b346c9fb4af9#diff-5c6e8c22956d54a6193a50ec2c2ca80a8b2be45efa15faa70a2e5f9d0f29d380

 $fileName = @realpath($publicPath . $uri);

The above line in SwooleTW\Http\Transformers\Request now returns the real path of the file, and then on line 196 it compares it against public path which does not match, returns false and hence will not serve the static file.

if (substr($fileName, 0, strlen($publicPath)) != $publicPath) {
            return false;
}

aftabnaveed avatar Mar 31 '21 23:03 aftabnaveed

Hello, thanks for reporting this issue.

Well, looks it will always be false indeed

Introduced at https://github.com/swooletw/laravel-swoole/pull/462

We should find a better way to fix the lfi issue by changing this if

Arkanius avatar Apr 01 '21 18:04 Arkanius

I think the issue is this line $fileName = @realpath($publicPath . $uri); realpath is a system call which resolves symlink to it's original value.

aftabnaveed avatar Apr 02 '21 00:04 aftabnaveed

Looks we could apply the realpath in both cases

Arkanius avatar Apr 06 '21 15:04 Arkanius

Maybe we could use the "finder": https://github.com/laravel/octane/pull/112/files

Arkanius avatar Apr 07 '21 12:04 Arkanius

How would that fix the symlink problem?

aftabnaveed avatar Apr 07 '21 12:04 aftabnaveed

BTW why is realpath being used here?

aftabnaveed avatar Apr 07 '21 12:04 aftabnaveed

see https://github.com/swooletw/laravel-swoole/pull/462

Arkanius avatar Apr 07 '21 20:04 Arkanius