하드 코딩
Hard coding하드 코딩(하드 코딩 또는 하드 코딩)은 데이터를 외부 소스에서 가져오거나 런타임에 생성하는 것이 아니라 프로그램이나 다른 실행 가능 개체의 소스 코드에 직접 데이터를 내장하는 소프트웨어 개발 관행입니다.하드 코딩된 데이터는 일반적으로 소스 코드를 편집하고 실행 파일을 다시 컴파일해야만 수정할 수 있지만, 메모리 또는 디스크에서 디버거 또는 16진수 편집기를 사용하여 변경할 수 있습니다.하드 코딩된 데이터는 물리적 상수, 버전 번호 및 정적 텍스트 요소 등 변경되지 않은 정보에 가장 적합합니다.한편 소프트 코드화된 데이터는 사용자 입력, 텍스트파일, INI 파일, HTTP 서버 응답, 컨피규레이션파일, 프리프로세서 매크로, 외부 상수, 데이터베이스, 명령줄 인수를 통해 임의의 정보를 인코딩하며 런타임에 결정됩니다.
개요
하드 코딩에서는 입력 데이터나 원하는 형식이 변경될 때마다 프로그램의 소스 코드를 변경해야 합니다. 이때 최종 사용자는 프로그램 [1]외부에서 세부 정보를 변경하는 것이 더 편리할 수 있습니다.
하드 코딩이 필요한 경우가 많지만 안티 [2]패턴으로 간주될 수도 있습니다.프로그래머는 최종 사용자를 위한 동적 사용자 인터페이스 솔루션을 가지고 있지 않을 수 있지만 기능을 제공하거나 프로그램을 출시해야 합니다.이것은 통상 일시적이지만, 단기적으로는 코드를 전달해야 하는 압박감을 해소합니다.나중에 사용자가 결과 또는 결과를 수정할 수 있는 매개 변수를 전달할 수 있도록 소프트 코딩이 수행됩니다.
"하드 코드"라는 용어는 처음에는 하드 배선 회로에 비유하여 사용되었으며, 이는 소프트웨어 설계 및 구현에서의 사용으로 인한 유연성이 없음을 전달하기 위한 것이었습니다.MUD와 같은 런타임 확장 가능한 협업 개발 환경에서 하드코딩은 실행 시 시스템에 의해 해석되는 고급 스크립트를 exte에서 값을 사용하여 개발하는 소프트코딩과 달리 낮은 수준의 태스크를 담당하는 시스템의 핵심 엔진을 개발하고 스크립트를 실행하는 것을 의미합니다.텍스트 파일, INI 파일, 프리프로세서 매크로, 외부 상수, 데이터베이스, 명령줄 인수, HTTP 서버 응답, 컨피규레이션파일, 사용자 입력 등의 rnal 소스.이 경우, 이 용어는 경멸적이지 않으며 출력 데이터를 구체적으로 포함하는 것이 아니라 일반적인 개발을 의미합니다.
하드코드 및 백도어
credential 하드코딩은 백도어를 작성하는 일반적인 방법입니다.하드코드된 credential은 보통 컨피규레이션파일이나 account-enumeration 명령어 출력에는 표시되지 않으며 사용자가 쉽게 변경하거나 바이패스할 수 없습니다.검출되었을 경우, 사용자는 소스 코드에서 프로그램을 수정 및 재구축하거나(소스가 공개되어 있는 경우), 프로그램의 바이너리 코드를 직접 편집하거나 무결성 검사(디지털 서명, 안티탬퍼, 안티치트 등)를 실시하여 이러한 백도어를 비활성화할 수 있습니다.예기치 않은 접근은 불가능하지만 최종 사용자 라이센스 계약에 의해 금지되는 경우가 많습니다.
하드 코딩 및 DRM
디지털 권리 관리 대책으로서 소프트웨어 개발자는, 고유의 일련 번호를 프로그램에 직접 하드 코드 할 수 있습니다.또는 공개키를 하드코드하여 키젠을 작성할 수 없는 DRM을 작성하는 것이 일반적입니다.
반대로 소프트웨어 크래커는 유효한 시리얼 번호를 프로그램에 하드 코드 하거나 실행 파일이 사용자에게 요구하는 것을 방지하여 유효한 번호를 입력할 필요 없이 허가되지 않은 복사본을 재배포할 수 있습니다.따라서 하드 코드화된 경우 모든 복사본에 대해 동일한 키를 공유할 수 있습니다.
고정 설치 경로
Windows 프로그램이 항상 C:\Program Files\Appname에 설치되어 있다고 가정하도록 프로그램되어 있는 경우 공간이나 조직상의 이유로 다른 드라이브에 설치하려고 하면 설치 또는 설치 후 실행이 실패할 수 있습니다.보통 사용자가 기본 드라이브와 디렉토리에 설치하고 테스트에 설치 디렉토리를 변경하는 옵션이 포함되지 않을 수 있으므로 테스트 프로세스에서 이 문제를 식별하지 못할 수 있습니다.단, 기본 설치 경로는 운영 체제, OS 버전 및 sysadmin 결정에 따라 다르기 때문에 프로그래머 및 개발자는 프로그램 설치 경로를 수정하지 않는 것이 좋습니다.예를 들어, Microsoft Windows 의 많은 인스톨에서는, 드라이브 C: 를 프라이머리 하드 디스크로서 사용하고 있습니다만, 이것은 보증되지 않습니다.
초기 컴퓨터의 마이크로프로세서와 유사한 문제가 있었는데, 메모리의 고정 주소에서 실행되기 시작했습니다.
시동 디스크
일부 "복사 방지" 프로그램은 부팅 시 플로피 디스크 또는 플래시 드라이브에서 특정 파일을 검색하여 무단 복사가 아닌지 확인합니다.컴퓨터를 플로피 드라이브가 없는 새로운 기계로 교체하면 플로피 디스크를 삽입할 수 없기 때문에 필요한 프로그램을 실행할 수 없습니다.
이 마지막 예에서는 하드 코딩이 완전히 동작하는 것처럼 보이는 경우에도 실행 불가능한 것으로 판명될 수 있는 이유를 보여 줍니다.1980년대와 1990년대에는 대부분의 PC에 적어도 하나의 플로피 드라이브가 장착되었지만 플로피 드라이브는 나중에 사용되지 않게 되었습니다.15년 전에 그렇게 하드코딩된 프로그램은 업데이트되지 않으면 문제에 직면할 수 있습니다.
특수 폴더
일부 윈도우즈 운영 체제에는 하드 디스크에 논리적으로 파일을 구성하는 특수 폴더가 있습니다.하드 코딩과 관련하여 발생할 수 있는 문제가 있습니다.
프로파일 패스
일부 Windows 프로그램은 다음과 같은 개발자 정의 위치에 대한 프로파일 경로를 하드 코드합니다.C:\Documents and Settings\Username
이것은 Windows 2000 이상의 대부분의 패스입니다만, 프로파일이 네트워크에 보존되어 있는 경우나, 다른 방법으로 재배치되어 있는 경우, 에러가 발생합니다.그것을 입수하는 적절한 방법은GetUserProfileDirectory
기능 또는 문제 해결하다%userprofile%
환경 변수입니다.개발자들이 자주 하는 또 다른 가정은 프로파일이 로컬 하드 디스크에 있다고 가정하는 것입니다.
내 문서 폴더 경로
일부 Windows 프로그램은 다음 경로의 하드코드화My Documents
~하듯이ProfilePath\My Documents
이러한 프로그램은 영어 버전을 실행하는 머신에서는 동작합니다만, 현지화된 버전의 Windows 에서는, 통상은 이 폴더의 이름이 다릅니다.예를 들어 이탈리아 버전에서는My Documents
폴더 이름은 Documenti입니다. My Documents
또한 Windows 2000 이상에서는 그룹 정책의 폴더 리다이렉션을 사용하여 재배치되었을 수 있습니다.그것을 입수하는 적절한 방법은SHGetFolderPath
기능.
솔루션
"FileName"이라는 프로그램 내의 변수와 같은 간접 참조는 "파일 찾아보기" 대화창에 액세스하여 확장할 수 있으며, 파일이 이동하더라도 프로그램 코드를 변경할 필요가 없습니다.
하드 코딩은 다른 언어로 번역하기 위해 소프트웨어를 준비할 때 특히 문제가 됩니다.
대부분의 경우 프로그램의 소스 코드 내에 어레이 크기 등의 단일 하드 코드 값이 여러 번 표시될 수 있습니다.이건 마법의 숫자일 거야값의 외관 중 일부가 변경되어도 모든 것이 변경되지는 않을 경우 일반적으로 프로그램 버그가 발생할 수 있습니다.이러한 버그는 찾기 어렵고 프로그램에 오래 남아 있을 수 있습니다.동일한 하드 코드화된 값이 여러 파라미터 값에 사용되는 경우에도 같은 문제가 발생할 수 있습니다.예를 들어 6개의 요소의 배열과 최소 입력 문자열 길이 6개입니다.프로그래머는 각 인스턴스가 어떻게 사용되는지 코드를 확인하지 않고 값의 모든 인스턴스(종종 에디터의 검색 및 치환 기능 사용)를 잘못 변경할 수 있습니다.두 경우 모두 이름을 값에 연관짓는 상수를 정의하고 코드 내의 각 모양에 대해 상수의 이름을 사용함으로써 피할 수 있습니다.
하드 코딩의 한 가지 중요한 경우는 문자열이 파일에 직접 배치되는 경우입니다.이 경우 번역자는 소스 코드를 편집하여 프로그램을 번역해야 합니다.(라는 툴이 있습니다.gettext
파일 내에 문자열을 남길 수 있지만 소스 코드를 변경하지 않고 번역자가 변환할 수 있습니다.이것에 의해, 문자열의 하드 코드가 효과적으로 해제됩니다).
경기에서의 하드 코딩
국제정보과학올림피아드 등 컴퓨터 대회에서는 참가자가 문제의 요건에 따라 특정 입출력 패턴을 가진 프로그램을 작성해야 한다.
가능한 투입물의 수가 충분히 적은 드문 경우, 참가자는 모든 가능한 투입물을 정확한 산출물에 매핑하는 접근방식의 사용을 고려할 수 있다.이 프로그램은 알고리즘이 아닌 하드 코드화된 솔루션으로 간주됩니다(하드 코드화된 프로그램이 알고리즘 프로그램의 출력일 수도 있음).
「 」를 참조해 주세요.
레퍼런스
- ^ Elfriede Dustin (2002). Effective Software Testing: 50 Specific Ways to Improve Your Testing. Addison-Wesley Professional. pp. 188–. ISBN 978-0-201-79429-8.
- ^ Tanya Janca (14 October 2020). Alice and Bob Learn Application Security. Wiley. pp. 15–. ISBN 978-1-119-68740-5.