같은 힌트

다음은 저희 프로젝트를 더욱 안전하게 하기 위해 여러분과 공유하고 싶은 노트들입니다.
  • 블레이드 XSS 공격
  • 우리가 이https://laravel.com/docs/8.x/blade#displaying-unescaped-We를 사용하는 것은 코드를 적당한 위치에 넣는 것을 피하기 위해서이다. 예를 들어 스크립트를 적당한 위치에 넣는 것이다
    Escaped text : {{ $text }} // with HTML tag
    non-escaped text : {!! $text !!} 
    
  • 당신의 몸을 보호하세요.환경 파일
  • 많은 데이터베이스와 다른 서비스의 비밀번호를 포함하기 때문에 env 파일을 공개하지 마십시오.
    당신은 또한 어떻게 사용하는지 배울 수 있습니다.env 예시 및 그 차이
    https://blog.quickadminpanel.com/how-to-use-laravel-env-example-files/
  • $request-all()
  • 사용하지 마십시오.
    $request-all () 를 사용하는 위험은 필드를 선별하지 않았기 때문에 브라우저 컨트롤러로 이동해서 변경할 수 있습니다
    너 이거 써도 돼.
    $request->validated()
    $request->only()
    $request->except()
    
  • 파일 업로드: 클라이언트 데이터
  • getclientOriginalName과 getclientOriginalExtension 방법은 악의적인 사용자가 파일 이름과 확장자를 변경할 수 있기 때문에 안전하지 않다는 것을 기억하십시오.따라서, 주어진 파일의 이름과 확장자를 가져오려면hashName과 extension 방법을 사용하는 것을 더 좋아해야 합니다. https://laravel.com/docs/8.x/filesystem#other-uploaded-file-information
    $file = $request->file('avatar');
    
    $name = $file->hashName(); // Generate a unique, random name...
    $extension = $file->extension(); // Determine the file's extension based on the file's MIME type...
    
  • APP DEBUG = 프로덕션에서 트루
  • 구성/애플리케이션의 디버그 옵션php 프로필은 사용자에게 실제적으로 표시되는 오류 정보량을 확인합니다.기본적으로 이 옵션은 응용 프로그램에 저장된 APP DEBUG 환경 변수의 값을 존중하도록 설정됩니다.환경 파일.
    로컬 개발의 경우 APP DEBUG 환경 변수를 true로 설정해야 합니다.프로덕션 환경에서 이 값은 항상 false여야 합니다.이 변수가 생산에서true로 설정되면 프로그램의 최종 사용자에게 민감한 설정 값을 노출할 수 있습니다.
    https://laravel.com/docs/8.x/configuration#debug-mode
  • CSRF 및 라우팅::get()
  • 프로그램에서 "POST", "PUT", "PATCH", "DELETE"HTML 폼을 정의할 때, CSRF가 중간부품을 보호해서 요청을 검증할 수 있도록 숨겨진 CSRF 영패 필드를 포함해야 합니다.편리하게 @csrf Blade 명령을 사용하여 숨겨진 영패 입력 필드를 생성할 수 있습니다
    <form method="POST" action="/profile">
        @csrf
    
    </form>
    
    Requests Route:::get()을 사용하여 데이터를 변경할 내용을 가져오지 마십시오.
    https://laravel.com/docs/8.x/csrf
  • 속도 제한
  • 서버에 대한 요청이 너무 많은 것을 방지하기 위해서입니다
    https://laravel.com/docs/8.x/routing#rate-limiting
  • 다른 사용자가 레코드를 액세스하지 않도록 보호
  • 1-사용자가 편집 중인지 확인하려면if를 편집 기능에 입력합니다.
    public function edit(Task $task)
    {
       if($task->created_by_id != auth()->id()){
          abort(403);
       }
       // edit
    }
    
    2. 정책
    https://laravel.com/docs/8.x/authorization#creating-policies
    우리는 정책을 제정한다
    php artisan make:policy TaskPolicy --model=Task
    
    정책에서 임무 완수를 확보하다
    public function view(User $user, Task $task)
    {
       return $task->created_by_id == $user->id
    }
    
    편집 기능에 authorize를 입력하여 사용자가 편집 중인지 확인합니다.
    public function edit(Task $task)
    {
       $this->authorize('view', $task);
    
       // edit
    }
    
    3-Laravel 역할 및 권한 사용
  • SQL 주입 보호 - Laravel DB 원시 조회
  • 질의에 변수 기호($)를 사용하지 않고 물음표를 사용한 다음 모든 값을 제공합니다.​​하나의 그룹으로
    ->selectRaw('price * ? as price_with_tax', [1.0825])
    
    만약 네가 깊이 파헤치고 싶다면, 여기에 약간의 출처가 있다.
    https://laravel.com/docs/8.x/queries#raw-expressions
    https://developer.okta.com/blog/2020/06/15/sql-injection-in-php
    https://en.wikipedia.org/wiki/SQL_injection
  • XSS 공격 방지(보이는 대로 텍스트 편집기)
  • 우선, 편집기에서 가장 적은 기능, 특히 html 소스 코드를 수정하는 것을 들어보세요.
    html 사용을 피하기 위해 이 편집기에 @ckeditor/ckeditor5 markdown gfm 확장자를 설치합니다
    https://ckeditor.com/docs/ckeditor5/latest/features/markdown.html
    마지막으로 어떤 이유로든 html을 처리하려면 가방https://github.com/mewebstudio/Purifier이 있으면 모든 악성코드를 삭제할 수 있습니다.
  • 4가지 "위험"Laravel 기능(조심해서 사용)
  • 1. 전역 범위
    이 기능https://laravel.com/docs/8.x/eloquent#global-scopes을 사용하십시오. 미래에 새로운 개발자가 프로젝트에 가입할 수 있고 사용자만 보일 수 있기 때문입니다. 예를 들어user:all (). 숨겨진 전역 역할 영역이 일부 데이터를 필터할 수 있다는 것을 모르고 로그인한 사용자가 사용하는 것이 좋습니다. ->where('user_id', auth()->id())2-기본적으로 즉시 로드
    이 기능 주의 https://laravel.com/docs/8.x/eloquent-relationships#eager-loading-by-default
    프로젝트의 미래 개발자를 생각해 보세요. 모든 검색어에 작가를 불러옵니다. 비록 그들이 이렇게 할 필요가 없을지라도.
    3. 전역 중간부품
    이 기능 https://laravel.com/docs/9.x/middleware#global-middleware 을 조심해서 사용하십시오. 장래에 이 중간부품을 필요로 하지 않는 프로그램에 나타날 수 있고 개발자가 이 기능을 사용하고 있는지 모르기 때문입니다.
    4-프레임 기본값 덮어쓰기
    이 기능을 주의 깊게 사용하십시오.프로젝트에 가입할 개발자를 생각해 보세요. delete라는 함수가 있습니다. 이 함수에는 서로 다른 테이블에서 삭제하고 함수 이름과 무관한 지령이 포함되어 있습니다. 따라서 laravel 프레임워크에서 알고 있는 기능, 함수, 속성을 덮어쓰면 미래의 개발자에게 불리할 수 있습니다.
    나는 네가 이 코드를 좋아하길 바란다. 마치 내가 어떤 정보를 알고 너와 공유하는 것을 좋아하는 것처럼.

    좋은 웹페이지 즐겨찾기