Sau 1 thời gian lười viết bài mình đã quay trở lại. Hôm nay mình sẽ viết về một số lỗi mà mình thường thấy các bạn mới học hoặc tự học Laravel hay gặp phải.

1. Di chuyển index.php ra ngoài thư mục gốc.

Đây là cách sai hoàn toàn, sai 100% nhé. Và trên công ty mình thì cách này không bao giờ được phép sử dụng.

Đây là lỗi đặc biệt nghiêm trọng mà mình thường thấy. Thay đổi cấu trúc mặc định là việc làm hoàn toàn không nên nhé. Laravel đã đưa index.php vào thư mục public để tránh truy cập trái

phép vào các file cấu hình, data của website nên chúng ta không nên thay đổi nó.

Trước đây mình đã từng làm cách này khi mới học Laravel và rất nhiều video hướng dẫn làm theo cách này dẫn tới 1 loạt websites có thể bị lộ thông tin cấu hình.

Ví dụ: https://www.novochem.net/.env, http://cworldcars.com/.env

Những thông tin này có vẻ không quá nhạy cảm nên mình mới show lên đây để anh em rút kinh nghiệm, chớ có phá website người ta mà tội nghiệp. Còn nhiều lắm nhưng mình để dành xài 😀

Một số sites họ đã dùng php.ini để chặn cách file quan trọng như .env nhưng cách làm này luôn tiềm ẩn rủi ro khi bạn không thể chắc chắn là đã chặn hết các files quan trọng.

Ví dụ: https://demo.themeqx.com/classifieds/composer.json

Composer.json có thể là 1 file rất hữu ích cho hacker khi họ có thể nắm rõ toàn bộ thông tin về phiên bản Laravel và các packages đang sử dụng.

Cách khắc phục: 

– Sử dụng .httacess: bạn chỉ cần tạo 1 file .htaccess ngoài thư mục gốc để điều hướng tất cả request của clients vào thư mục /public

RewriteEngine on

RewriteCond %{REQUEST_URI} !^public

RewriteRule ^(.*)$ public/$1 [L]

 

– Cấu hình virtual host để tạo domain ảo, trỏ thẳng vào thư mục public.

Ví dụ:

#your-domain.local
<VirtualHost *:80>
    ServerName your-domain.local
    DocumentRoot "**your-project-folder/public**"
    <Directory "**your-project-folder/public**">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

 

– Sử dụng phần mềm hỗ trợ tạo domain ảo như Ampps, Open server, Docker …

2. Bật debug trên production

Đây là 1 lỗi cũng khá nghiêm trọng, đặc biệt khi kể từ Laravel 5.5 thì Whoops đã được đưa trở lại làm package mặc định của Laravel. Nó giúp cho việc debug dễ dàng hơn nhưng lại cực

kỳ nguy hiểm khi người dùng quên tắt debug khi lên production.

Toàn bộ thông tin bị hiện lên rõ ràng như vậy thì quả là không tốt chút nào.

Cách khắc phục:

  • Tắt debug bằng cách thiết lập trong .env giá trị APP_DEBUG=falseAPP_ENV=production
  • Thay đổi config trong config/app.php để ẩn cách thông tin quan trọng, vì đôi khi mình quên tắt debug trên server.
'debug_blacklist' => [
    '_ENV' => [
        'APP_KEY',
        'ADMIN_DIR',
        'DB_DATABASE',
        'DB_USERNAME',
        'DB_PASSWORD',
        'REDIS_PASSWORD',
        'MAIL_PASSWORD',
        'PUSHER_APP_KEY',
        'PUSHER_APP_SECRET',
    ],
    '_SERVER' => [
        'APP_KEY',
        'ADMIN_DIR',
        'DB_DATABASE',
        'DB_USERNAME',
        'DB_PASSWORD',
        'REDIS_PASSWORD',
        'MAIL_PASSWORD',
        'PUSHER_APP_KEY',
        'PUSHER_APP_SECRET',
    ],
    '_POST' => [
        'password',
    ],
],

 

Lúc này thì những thông tin sẽ được ẩn và thay bằng dấu ‘*

3. Sử dụng dev dependencies trên production.

Một số packages như Laravel Debugbar, Laravel Dusk … là những packages không nên được sự dụng trên production vì nó có thể để lộ cách thông tin nhạy cảm về cấu hình server và

các dữ liệu quan trọng như sessions, .env, SERVER …

 

Ví dụ:

Cách khắc phục: Chạy composer install –no-dev để loại bỏ hết dev dependencies trước khi upload lên server production.

 

Trên đây chỉ là một số lỗi cơ bản và nghiêm trọng mà mình thường thấy ở những bạn ít kinh nghiệm khi làm việc với Laravel. Hi vọng có thể giúp ích cho các bạn!

 

Mình là 1 developer mới vào nghề, chưa có nhiều kinh nghiệm với lập trình web nhưng luôn muốn chia sẻ những hiểu biết của mình với các lập trình viên khác. Khá là gà và lười viết blog, chỉ ham code và chuyên Laravel.