fbpx
Wikipedia

Magic string

In computer programming, a magic string is an input that a programmer believes will never come externally and which activates otherwise hidden functionality. A user of this program would likely provide input that gives an expected response in most situations. However, if the user does in fact innocently provide the pre-defined input, invoking the internal functionality, the program response is often quite unexpected to the user (thus appearing "magical").[1]

Background edit

Typically, the implementation of magic strings is due to time constraints. A developer must find a fast solution instead of delving more deeply into a problem and finding a better solution.

For example, when testing a program that takes a user's personal details and verifies their credit card number, a developer may decide to add a magic string shortcut whereby entering the unlikely input of "***" as a credit card number would cause the program to automatically proceed as if the card were valid, without spending time verifying it. If the developer forgets to remove the magic string, and a user of the final program happens to enter "***" as a placeholder credit card number while filling in the form, the user would inadvertently trigger the hidden functionality.

Resolution edit

Situations/issues of cause edit

Often there are significant time constraints out of the developer's control right from the beginning of their involvement in a project. Common issues that might lead to this anti-pattern as a result:

  • Null != null[2] or any variation where a data type doesn't compare bitwise to a supposedly identical type. This is an issue that can even occur within the same development environment (same programming language and compiler). This problem has a long history for numerical and boolean types and most compilers handle this well (with applicable warnings and errors, default resolution, etc...). Nullable types such as strings have the difficulty of historically different definitions for NULL. The errors/warnings produced are often general or a 'best fit' default error whose message does not actually describe what's going on. If the developer can't get enough clues to track the issue down through debugging, taking a short cut, and coding in a 'default' string, may be the only way to keep the project on schedule. One solution to this may be the application of the Null Object pattern.[3]
  • Programmed into a corner. Sometimes a design seems straightforward and even simple but turns out to have a logical flaw, dependent upon the possible user inputs, due to an often unforeseen circumstance towards the end of planned development. Thus a developer might feel the need to implement a user input with special security/operational allowances to deal with such circumstances. This can be particularly ironic since it will sometimes become obvious that a more robust design from the beginning would likely have left room to handle the flaw. However this would perhaps have taken too much time to implement and it might have conflicted with the fundamental engineering concept of KISS, keeping a design and implementation simple and meeting only the initial necessary requirements.
  • Allowing external access to a global flag.[4] Over-confidence that a global flag can never be set accidentally or maliciously (often a quite reasonable assumption) justifies such implementation for testing and debug purposes, especially for small applications with simple interfaces. If the distribution of the program is considerable however, it is usually just a matter of time before somebody sets the flag. An obvious solution is to never use a global variable in such a manner. A developer might also make the flag circumstantially accessible. So the magic string by itself would be dealt with by the program as any other input.[5] The user has to then reproduce the setting as well as produce some collection of other events, that the user interface discreetly allows, for the flag to accept the setting; a far more unlikely scenario, though still possible.

Strict formatting edit

Restricting the format of the input is a possible maintenance (bug fixing) solution.[clarification needed] Essentially, this means validating input information to check that it is in the correct format, in order to reduce the possibility of the magic string being discovered by the user. Examples include validating a telephone number to ensure that it contains only digits (and possibly spaces and punctuation to a limited extent) or checking that a person's name has a forename and a surname (and is appropriately capitalised). An exception is made for the magic string in the validation code so that it will not be rejected by validation. It is expected that, since a user would likely quickly notice the strict enforcement of formatting, it would likely not occur to the user to try inputting a string not conforming to the format. Therefore, it is very unlikely for the user to try the magic string.

As with any input validation process, it is important to ensure that the format is not restrictive in a way that unintentionally restricts the use of the application by some users. An example of this is restricting telephone number or postal code[6] input based on one country's system (e.g. requiring every user to give a five-digit ZIP code), causing problems for legitimate users who are based in other countries.

Purposeful implementation edit

As is often the case with anti-patterns, there exist specific scenarios where magic strings are a correct solution for an implementation. Examples include cheat codes[7] and Easter eggs. Furthermore, there are cases when users invent magic strings, and systems that have not coded to accept them can produce unexpected results such as missing license plates.[8]

Incidents edit

The following is a list of some known incidents where use of a magic string has caused problems.

  • In several different cases, motorists with personalized strings on their vehicle registration plates have received incorrect traffic tickets. In affected ticketing systems, when police officers would fill out a traffic ticket for a car with no registration plate, they would write "NOPLATE", "NOTAG", "MISSING", or similar. This caused issues when motorists were granted actual registration plates with these values, and thus began receiving numerous traffic tickets intended for these plateless vehicles.[8]
  • In 1999, hackers revealed a security flaw in Hotmail that permitted anybody to log in to any Hotmail account using the password 'eh'. At the time it was called "the most widespread security incident in the history of the Web".[9]
  • People with the last name Null have reported a variety of problems using online systems, such as being unable to book plane tickets, use government tax websites, or pay utility bills.[10] The issue stems from these systems confusing their name for a null pointer. Depending on the system, this may cause the system to not show their name, to ask the user to enter a different name (sometimes with a message claiming that the name field had been left blank), or to show an error message.[11]

See also edit

References edit

  1. ^ Chris Falter (March 6, 2008), A Good Solution for Magic String Data, Egghead Cafe Tuturiols, retrieved May 11, 2009
  2. ^ Wang Lam (May 21, 2003), The Behavior of NULL's in SQL, Stanford University, retrieved May 13, 2009
  3. ^ Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates; 2004, Head First Design Patterns, 1st ed., O'Reilly, Chapter 6, pg. 214, The Command Pattern, ISBN 0-596-00712-4, ISBN 978-0-596-00712-6
  4. ^ James McCaffrey (2009), Test Automation for ASP.NET Web Apps with SSL, Microsoft, retrieved May 13, 2009
  5. ^ Andrew Cumming; 2007, SQL Hacks, 1st ed., O'Reilly, pg. 174, Prevent an SQL Injection Attack, ISBN 0-596-52799-3, ISBN 978-0-596-52799-0
  6. ^ Brian Knight, Allan Mitchell, Darren Green, Douglas Hinson, Kathi Kellenberger; 2005, Professional SQL server 2005 integration services, 1st ed., John Wiley and Sons, Chapter 5, pg. 129, Handling Dirty Data, ISBN 0-7645-8435-9, ISBN 978-0-7645-8435-0
  7. ^ Sezen, Tonguc Ibrahim; Isikoglu, Digdem (April 27, 2007). "From Ozans to God-Modes: Cheating in Interactive Entertainment From Different Cultures" (PDF). p. 8. Retrieved January 24, 2009.
  8. ^ a b "What Happens when Your License Plate Says 'NO PLATE'?". October 30, 1999.
  9. ^ Glave, James (August 30, 1999). "Hotmail Hackers: 'We Did It'". Wired. Condé Nast. Retrieved November 3, 2007.
  10. ^ Baraniuk, Chris (March 25, 2016). "These unlucky people have names that break computers". BBC.com. Retrieved January 30, 2022.
  11. ^ Null, Christopher (November 5, 2015). "Hello, I'm Mr. Null. My Name Makes Me Invisible to Computers". Wired. Retrieved January 30, 2022.

magic, string, confused, with, magic, number, programming, therapeutic, computer, programming, magic, string, input, that, programmer, believes, will, never, come, externally, which, activates, otherwise, hidden, functionality, user, this, program, would, like. Not to be confused with Magic number programming or Magic string therapeutic aid In computer programming a magic string is an input that a programmer believes will never come externally and which activates otherwise hidden functionality A user of this program would likely provide input that gives an expected response in most situations However if the user does in fact innocently provide the pre defined input invoking the internal functionality the program response is often quite unexpected to the user thus appearing magical 1 Contents 1 Background 2 Resolution 2 1 Situations issues of cause 2 2 Strict formatting 3 Purposeful implementation 4 Incidents 5 See also 6 ReferencesBackground editTypically the implementation of magic strings is due to time constraints A developer must find a fast solution instead of delving more deeply into a problem and finding a better solution For example when testing a program that takes a user s personal details and verifies their credit card number a developer may decide to add a magic string shortcut whereby entering the unlikely input of as a credit card number would cause the program to automatically proceed as if the card were valid without spending time verifying it If the developer forgets to remove the magic string and a user of the final program happens to enter as a placeholder credit card number while filling in the form the user would inadvertently trigger the hidden functionality Resolution editSituations issues of cause edit Often there are significant time constraints out of the developer s control right from the beginning of their involvement in a project Common issues that might lead to this anti pattern as a result Null null 2 or any variation where a data type doesn t compare bitwise to a supposedly identical type This is an issue that can even occur within the same development environment same programming language and compiler This problem has a long history for numerical and boolean types and most compilers handle this well with applicable warnings and errors default resolution etc Nullable types such as strings have the difficulty of historically different definitions for NULL The errors warnings produced are often general or a best fit default error whose message does not actually describe what s going on If the developer can t get enough clues to track the issue down through debugging taking a short cut and coding in a default string may be the only way to keep the project on schedule One solution to this may be the application of the Null Object pattern 3 Programmed into a corner Sometimes a design seems straightforward and even simple but turns out to have a logical flaw dependent upon the possible user inputs due to an often unforeseen circumstance towards the end of planned development Thus a developer might feel the need to implement a user input with special security operational allowances to deal with such circumstances This can be particularly ironic since it will sometimes become obvious that a more robust design from the beginning would likely have left room to handle the flaw However this would perhaps have taken too much time to implement and it might have conflicted with the fundamental engineering concept of KISS keeping a design and implementation simple and meeting only the initial necessary requirements Allowing external access to a global flag 4 Over confidence that a global flag can never be set accidentally or maliciously often a quite reasonable assumption justifies such implementation for testing and debug purposes especially for small applications with simple interfaces If the distribution of the program is considerable however it is usually just a matter of time before somebody sets the flag An obvious solution is to never use a global variable in such a manner A developer might also make the flag circumstantially accessible So the magic string by itself would be dealt with by the program as any other input 5 The user has to then reproduce the setting as well as produce some collection of other events that the user interface discreetly allows for the flag to accept the setting a far more unlikely scenario though still possible Strict formatting edit Restricting the format of the input is a possible maintenance bug fixing solution clarification needed Essentially this means validating input information to check that it is in the correct format in order to reduce the possibility of the magic string being discovered by the user Examples include validating a telephone number to ensure that it contains only digits and possibly spaces and punctuation to a limited extent or checking that a person s name has a forename and a surname and is appropriately capitalised An exception is made for the magic string in the validation code so that it will not be rejected by validation It is expected that since a user would likely quickly notice the strict enforcement of formatting it would likely not occur to the user to try inputting a string not conforming to the format Therefore it is very unlikely for the user to try the magic string As with any input validation process it is important to ensure that the format is not restrictive in a way that unintentionally restricts the use of the application by some users An example of this is restricting telephone number or postal code 6 input based on one country s system e g requiring every user to give a five digit ZIP code causing problems for legitimate users who are based in other countries Purposeful implementation editAs is often the case with anti patterns there exist specific scenarios where magic strings are a correct solution for an implementation Examples include cheat codes 7 and Easter eggs Furthermore there are cases when users invent magic strings and systems that have not coded to accept them can produce unexpected results such as missing license plates 8 Incidents editThis list is incomplete you can help by adding missing items January 2022 The following is a list of some known incidents where use of a magic string has caused problems In several different cases motorists with personalized strings on their vehicle registration plates have received incorrect traffic tickets In affected ticketing systems when police officers would fill out a traffic ticket for a car with no registration plate they would write NOPLATE NOTAG MISSING or similar This caused issues when motorists were granted actual registration plates with these values and thus began receiving numerous traffic tickets intended for these plateless vehicles 8 In 1999 hackers revealed a security flaw in Hotmail that permitted anybody to log in to any Hotmail account using the password eh At the time it was called the most widespread security incident in the history of the Web 9 People with the last name Null have reported a variety of problems using online systems such as being unable to book plane tickets use government tax websites or pay utility bills 10 The issue stems from these systems confusing their name for a null pointer Depending on the system this may cause the system to not show their name to ask the user to enter a different name sometimes with a message claiming that the name field had been left blank or to show an error message 11 See also editMagic number programming Time formatting and storage bugs for problems that can be caused by magics Sentinel value aka flag value trip value rogue value signal value dummy data Canary value special value to detect buffer overflows Video games cheat codes which have the same origin XYZZY command References edit Chris Falter March 6 2008 A Good Solution for Magic String Data Egghead Cafe Tuturiols retrieved May 11 2009 Wang Lam May 21 2003 The Behavior of NULL s in SQL Stanford University retrieved May 13 2009 Eric Freeman Elisabeth Freeman Kathy Sierra Bert Bates 2004 Head First Design Patterns 1st ed O Reilly Chapter 6 pg 214 The Command Pattern ISBN 0 596 00712 4 ISBN 978 0 596 00712 6 James McCaffrey 2009 Test Automation for ASP NET Web Apps with SSL Microsoft retrieved May 13 2009 Andrew Cumming 2007 SQL Hacks 1st ed O Reilly pg 174 Prevent an SQL Injection Attack ISBN 0 596 52799 3 ISBN 978 0 596 52799 0 Brian Knight Allan Mitchell Darren Green Douglas Hinson Kathi Kellenberger 2005 Professional SQL server 2005 integration services 1st ed John Wiley and Sons Chapter 5 pg 129 Handling Dirty Data ISBN 0 7645 8435 9 ISBN 978 0 7645 8435 0 Sezen Tonguc Ibrahim Isikoglu Digdem April 27 2007 From Ozans to God Modes Cheating in Interactive Entertainment From Different Cultures PDF p 8 Retrieved January 24 2009 a b What Happens when Your License Plate Says NO PLATE October 30 1999 Glave James August 30 1999 Hotmail Hackers We Did It Wired Conde Nast Retrieved November 3 2007 Baraniuk Chris March 25 2016 These unlucky people have names that break computers BBC com Retrieved January 30 2022 Null Christopher November 5 2015 Hello I m Mr Null My Name Makes Me Invisible to Computers Wired Retrieved January 30 2022 Retrieved from https en wikipedia org w index php title Magic string amp oldid 1213545440, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.