매직 스트링

Magic string

컴퓨터 프로그래밍에서, 마법 문자열은 프로그래머가 외부에서 절대 오지 않을 것이라고 믿고 그렇지 않으면 숨겨진 기능을 활성화하는 입력입니다.이 프로그램의 사용자는 대부분의 상황에서 예상되는 응답을 제공하는 입력을 제공할 수 있습니다.그러나 사용자가 실제로 사전 정의된 입력을 제공하고 내부 기능을 호출하는 경우 프로그램 응답은 종종 사용자에게 전혀 예상치 못한 것입니다(따라서 "만화"[1]처럼 보입니다).

배경

일반적으로 매직 스트링의 실장은 시간 제약에 의한 것입니다.개발자는 문제를 더 깊이 파고들어 더 나은 해결책을 찾을 것이 아니라 빠른 해결책을 찾아야 합니다.

예를 들어, 사용자의 개인 정보를 가져와서 신용카드 번호를 확인하는 프로그램을 테스트할 때, 개발자는 마법의 문자열 단축키를 추가하기로 결정할 수 있다. 이 마법의 문자열 단축키는 신용 카드 번호로 "***"를 입력하는 것이 불가능할 경우 프로그램이 유효한 것처럼 자동으로 진행되며, 이를 확인하는 데 시간을 들이지 않아도 된다.개발자가 매직스트링을 삭제하는 것을 잊어버리고 최종 프로그램의 사용자가 폼을 작성하는 동안 플레이스홀더 신용카드 번호로 "***"를 입력하는 경우 사용자가 실수로 숨겨진 기능을 트리거하게 됩니다.

결의안

원인 상황/문제

대부분의 경우 개발자가 프로젝트에 관여하기 시작한 직후부터 상당한 시간적 제약이 있습니다.결과적으로 이 안티패턴을 일으킬 수 있는 일반적인 문제:

  • Null != null[2][3] 또는 데이터 형식이 동일한 형식과 비트를 비교하지 않는 모든 변동입니다.이는 동일한 개발 환경(같은 프로그래밍 언어 및 컴파일러) 내에서 발생할 수 있는 문제입니다.이 문제는 수치형 및 부울형에서 오랜 역사를 가지고 있으며 대부분의 컴파일러는 이를 잘 처리합니다(적용되는 경고 및 오류, 기본 해상도 등).문자열과 같은 NULL 유형에서는 NULL에 대해 역사적으로 다른 정의가 필요합니다.생성되는 오류/경고는 일반 오류이거나 메시지에 실제로 무슨 일이 일어나고 있는지 설명하지 않는 'best fit' 기본 오류인 경우가 많습니다.개발자가 디버깅, 바로 가기, '기본' 문자열로 코딩하는 방법으로 문제를 추적할 수 있는 충분한 단서를 얻을 수 없는 경우 프로젝트를 일정대로 유지하는 유일한 방법이 될 수 있습니다.에 대한 해결책 중 하나는 Null Object [4]패턴을 적용하는 것입니다.
  • 코너에 프로그램되어 있다.때로는 설계가 단순해 보이기도 하지만, 계획한 개발의 마지막에 종종 예상치 못한 상황이 발생하여 가능한 사용자의 입력에 따라 논리적인 결함이 있는 것으로 판명되기도 합니다.따라서 개발자는 이러한 상황에 대처하기 위해 특별한 보안/운영 허용을 가진 사용자 입력을 구현할 필요성을 느낄 수 있습니다.이것은 특히 아이러니할 수 있습니다.처음부터 보다 견고한 설계가 결점을 처리할 여지를 남겼을 가능성이 높기 때문입니다.단, 이 경우 구현에 시간이 너무 오래 걸리고 KISS의 기본 엔지니어링 개념과 상충되어 설계와 구현이 단순하고 초기 필수 요건만 충족될 수 있습니다.
  • 글로벌 [5]플래그에 대한 외부 접근을 허용합니다.글로벌 플래그를 우발적으로 또는 악의적으로 설정할 수 없다는 과신(대개 상당히 합리적인 전제 조건)은 테스트 및 디버깅 목적으로, 특히 단순한 인터페이스를 가진 소규모 응용 프로그램의 경우 이러한 구현을 정당화합니다.그러나 프로그램의 배포가 상당하다면 누군가가 플래그를 설정하는 것은 보통 시간 문제일 뿐이다.분명한 해결책은 절대 이러한 방식으로 글로벌 변수를 사용하지 않는 것입니다.개발자는 상황에 따라 플래그를 액세스할 수 있도록 만들 수도 있습니다.따라서 마법의 문자열 자체도 다른 [6]입력과 마찬가지로 프로그램에 의해 처리됩니다.그 후 사용자는 플래그가 설정을 받아들이도록 신중하게 허용하는 다른 이벤트의 컬렉션을 생성할 뿐만 아니라 설정을 재현해야 합니다.그러나 가능성은 매우 낮습니다.

엄밀한 포맷

입력 형식을 제한하는 것은 가능한 유지보수([clarification needed]버그 수정) 솔루션입니다.기본적으로 매직 문자열이 사용자에 의해 발견될 가능성을 줄이기 위해 입력 정보를 검증하여 올바른 포맷인지 확인하는 것을 의미합니다.예를 들어 전화번호에 숫자(및 공백과 구두점이 제한적으로 포함됨)만 포함되도록 확인하거나, 개인의 이름에 이름과 성이 있는지(그리고 적절하게 대문자로 표시됨) 확인하는 것이 포함됩니다.유효성 검사 코드의 매직 문자열에 대한 예외가 생성되어 유효성 검사에서 거부되지 않습니다.사용자는 포맷의 엄격한 시행을 금방 알아차릴 수 있기 때문에 포맷에 준거하지 않는 문자열을 입력하려고 하지 않을 것으로 예상됩니다.따라서 사용자가 매직스트링을 시도할 가능성은 매우 낮습니다.

입력 검증 프로세스와 마찬가지로 일부 사용자에 의한 애플리케이션 사용을 의도하지 않게 제한하는 방식으로 형식이 제한되지 않도록 하는 것이 중요합니다.를 들어, 한 나라의 시스템에 근거해 전화 번호나 우편[7] 번호의 입력을 제한하는 것(예를 들면, 모든 유저가 5 자리수의 ZIP 번호를 지정할 필요가 있다)이, 다른 나라에 거점을 둔 합법적인 유저에게 문제를 일으킨다.

목적에 따른 구현

안티 패턴의 경우와 마찬가지로 매직 문자열이 구현에 적합한 솔루션인 특정 시나리오가 존재합니다.예를 들어 치트[8] 코드와 부활절 달걀이 있다.또한 사용자가 매직 스트링을 발명하는 경우도 있으며, 이를 받아들이도록 코드화되지 않은 시스템은 번호판이 [9]누락되는 등 예상치 못한 결과를 초래할 수 있다.

사고

다음은 매직 스트링 사용으로 문제가 발생한 것으로 알려진 몇 가지 사고의 목록입니다.

  • 차량 등록 번호판에 개인화된 줄이 있는 운전자들이 잘못된 교통 위반 딱지를 받은 경우가 몇 가지 있습니다.영향을 받는 티켓팅 시스템에서는 경찰관이 번호판이 없는 차량의 교통 티켓을 작성할 때 "NOplate", "NOTAG", "MISSING" 또는 이와 유사한 내용을 적습니다.이로 인해 운전자들에게 이러한 값의 실제 등록번호판이 부여되면서 문제가 발생하였고, 따라서 이러한 번호판 없는 차량을 [9]위한 수많은 교통위반 딱지를 받기 시작했다.
  • 1999년 해커들은 누구나 비밀번호 'eh'를 사용하여 Hotmail 계정에 로그인할 수 있는 Hotmail의 보안 결함을 발견했다.그 당시에는 "웹 역사상 가장 광범위한 보안 사고"[10]로 불렸다.
  • 성이 Null인 사람들은 비행기 표를 예매할 수 없거나, 정부 세금 웹사이트를 이용할 수 없거나,[11] 공과금을 낼 수 없는 등 온라인 시스템을 사용하는 데 있어 다양한 문제를 보고해왔다.이 문제는 이러한 시스템의 이름을 포인터로 혼동하기 때문에 발생합니다.시스템에 따라서는 이름이 표시되지 않거나 사용자에게 다른 이름을 입력하도록 요구하거나(경우에 따라서는 이름 필드가 공백이라고 주장하는 메시지가 표시됨) 오류 [12]메시지가 표시될 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Chris Falter (March 6, 2008), A Good Solution for Magic String Data, "Egghead Cafe Tuturiols" at Egghead Cafe, retrieved May 11, 2009 {{citation}}:외부 링크 publisher=(도움말)
  2. ^ Frank Naude (December 6, 2008), NULL, "Oracle Wiki" at Oracle Wiki, retrieved May 13, 2009 {{citation}}:외부 링크 publisher=(도움말)
  3. ^ Wang Lam (May 21, 2003), The Behavior of NULL's in SQL, "Stanford University" at Stanford InfoLab, retrieved May 13, 2009 {{citation}}:외부 링크 publisher=(도움말)
  4. ^ Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates; 2004, 헤드 퍼스트 디자인 패턴, O'Reilly, 제6장 214, 페이지 214, 명령 패턴, ISBN 0-596-00712-4, ISBN 978-096-007126
  5. ^ James McCaffrey (2009), Test Automation for ASP.NET Web Apps with SSL, "Microsoft" at MSDN, retrieved May 13, 2009 {{citation}}:외부 링크 publisher=(도움말)
  6. ^ Andrew Cumming; 2007, SQL Hacks, 제1판, O'Reilly, 174, SQL 주입 공격 방지, ISBN 0-596-52799-3, ISBN 978-0-596-52799-0
  7. ^ Brian Knight, Allan Mitchell, Darren Green, Douglas Hinson, Kathi Kellenberger, 2005, Professional SQL Server 2005 통합 서비스, 제1판, John Wiley and Sons, 챕터 5, 페이지 129, 더티 데이터 처리, ISBN 0-7645-8435-9, ISBN-0764
  8. ^ Sezen, Tonguc Ibrahim; Isikoglu, Digdem (April 27, 2007). "FROM OZANS TO GOD-MODES: CHEATING IN INTERACTIVE ENTERTAINMENT FROM DIFFERENT CULTURES" (PDF): 8. Retrieved January 24, 2009. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  9. ^ a b "What Happens when Your License Plate Says 'NO PLATE'?".
  10. ^ Glave, James (August 30, 1999). "Hotmail Hackers: 'We Did It'". Wired. Condé Nast. Retrieved November 3, 2007.
  11. ^ Baraniuk, Chris (March 25, 2016). "These unlucky people have names that break computers". BBC.com. Retrieved January 30, 2022.
  12. ^ Null, Christopher (November 5, 2015). "Hello, I'm Mr. Null. My Name Makes Me Invisible to Computers". Wired. Retrieved January 30, 2022.