>  기사  >  운영 및 유지보수  >  SQL 주입 공격으로부터 웹 애플리케이션을 보호하기 위해 CentOS 시스템을 구성하는 방법

SQL 주입 공격으로부터 웹 애플리케이션을 보호하기 위해 CentOS 시스템을 구성하는 방법

WBOY
WBOY원래의
2023-07-05 12:58:371737검색

SQL 주입 공격으로부터 웹 애플리케이션을 보호하기 위해 CentOS 시스템을 구성하는 방법

소개:
인터넷이 발전하면서 웹 애플리케이션의 사용이 점점 더 널리 보급되고 있지만 웹 애플리케이션의 보안 문제도 발생합니다. 그 중 SQL 주입 공격이 가장 일반적인 공격 방법이다. 웹 애플리케이션을 보호하려면 CentOS 시스템에서 일련의 구성과 최적화를 수행해야 합니다. 이 문서에서는 SQL 주입 공격으로부터 웹 애플리케이션을 보호하기 위해 CentOS 시스템을 구성하는 방법을 설명합니다.

  1. 웹 서버 설치 및 구성
    먼저 웹 애플리케이션을 호스팅할 안정적인 웹 서버를 설치하고 구성해야 합니다. 여기서는 일반적으로 사용되는 Apache 서버를 예로 선택합니다. 다음은 CentOS에 Apache 서버를 설치하는 명령의 예입니다.

    sudo yum install httpd

    설치를 완료한 후 Apache에서 몇 가지 보안 구성을 수행해야 합니다. 먼저 공격자가 서버에서 중요한 정보를 얻는 것을 방지하기 위해 서버에서 디렉터리 검색을 비활성화합니다. 다음은 httpd.conf 파일을 수정하여 디렉토리 검색을 비활성화하는 예입니다.

    sudo vi /etc/httpd/conf/httpd.conf

    파일에서 다음 줄을 찾습니다.

    Options Indexes FollowSymLinks

    다음으로 변경합니다.

    Options -Indexes FollowSymLinks

    파일을 저장하고 종료합니다. 그런 다음 Apache 서버를 다시 시작하여 적용합니다.

    sudo systemctl restart httpd
  2. 데이터베이스 서버 구성
    웹 애플리케이션에서는 데이터를 저장하고 관리하기 위해 데이터베이스를 사용해야 하는 경우가 많습니다. 여기서는 데이터를 저장할 데이터베이스 서버로 MySQL을 선택합니다. 다음은 CentOS에 MySQL 서버를 설치하는 명령 예입니다.

    sudo yum install mysql-server

    설치를 완료한 후 MySQL에 대한 몇 가지 보안 구성을 수행해야 합니다. 먼저 원격 액세스를 비활성화하고 데이터베이스에 대한 로컬 액세스만 허용합니다. 다음은 my.cnf 파일을 수정하여 원격 액세스를 비활성화하는 예입니다.

    sudo vi /etc/my.cnf

    다음 줄을 찾습니다.

    bind-address = 127.0.0.1

    줄 앞에 주석 기호 "#"를 추가하여 주석 줄로 만듭니다.

    #bind-address = 127.0.0.1

    저장하고 종료합니다. 파일. 그런 다음 구성이 적용되도록 MySQL 서버를 다시 시작합니다.

    sudo systemctl restart mysqld
  3. 보안 웹 애플리케이션 코드 작성
    웹 애플리케이션 코드를 작성할 때 SQL 주입 공격을 방지하기 위해 몇 가지 보안 조치를 취해야 합니다. 방어 조치를 위한 몇 가지 샘플 코드는 다음과 같습니다.
  4. 매개변수화된 쿼리 문 사용: SQL 쿼리를 실행할 때 문자열을 연결하는 대신 매개변수화된 쿼리 문을 사용해야 합니다. 이렇게 하면 공격자가 악의적인 입력을 사용하여 추가 SQL 코드를 삽입하는 것을 방지할 수 있습니다. 다음은 매개변수화된 쿼리를 사용하는 예입니다.

    import pymysql
    
    conn = pymysql.connect(host='localhost', user='username', password='password', database='dbname')
    cursor = conn.cursor()
    
    sql = "SELECT * FROM users WHERE username = %s"
    username = 'admin'
    cursor.execute(sql, (username,))
    
    result = cursor.fetchall()
    
    for row in result:
     print(row)
    
    conn.close()
  • 입력 필터링 및 유효성 검사: 사용자 입력을 받을 때 입력이 예상 형식 및 유형을 준수하는지 확인하기 위해 입력을 필터링하고 유효성을 검사해야 합니다. 다음은 입력 필터링 및 유효성 검사의 예입니다.

    username = input("请输入用户名:")
    
    # 过滤非法字符
    for char in username:
      if char not in ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_'):
          username = username.replace(char, '')
    
    # 验证用户名长度
    if len(username) > 20:
      username = username[:20]
    
    print("处理后的用户名为:", username)
  • 보안 데이터베이스 라이브러리 사용: 데이터베이스 라이브러리를 사용할 때 pymysql 또는 psycopg2와 같은 신뢰할 수 있는 라이브러리를 선택해야 하며 보안 취약성이 있는 것으로 알려진 라이브러리는 사용을 피해야 합니다. 이러한 라이브러리는 일반적으로 특수 문자 자동 이스케이프 등과 같은 몇 가지 내장된 방어 수단을 제공합니다.

결론:
위의 구성과 코드 최적화를 통해 SQL 주입 공격으로부터 웹 애플리케이션을 효과적으로 보호할 수 있습니다. 물론 이는 보호 조치의 일부일 뿐이며, 다른 보안 문제에도 주의를 기울이고 적시에 시스템을 업데이트하고 유지 관리해야 합니다. 다양한 보안 조치를 결합함으로써 웹 애플리케이션과 데이터의 보안을 보다 효과적으로 보호할 수 있습니다.

위 내용은 SQL 주입 공격으로부터 웹 애플리케이션을 보호하기 위해 CentOS 시스템을 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.