본 시리즈에서는 굳이 알아야 하나 싶지만 알아두면 언젠가 쓸모있을 거 같은 것을 모아둡니다.

📓 시작하며

근래에 해킹캠프라는 곳에서 문제풀이를 할 일이 있었습니다.

SQLite3에 데이터들을 저장하며 사용하고 있었고 처음에는 SQLi인가 싶었지만 필터링이 좀 걸려있어서 옛날에 이런 문제있었지 싶어서 그 방법으로 풀이하였고, 그에 대해 적습니다

🤔 'A' != 'Ạ' && 'A' = 'Ạ'

'A''Ạ' 와 다릅니다, 하지만 'A''Ạ' 같습니다.
물론 모순입니다. 다르다면서 같다뇨;

하지만 저 비교연산을 하는 환경이 다르다면 말이 됩니다.
앞쪽의 비교연산은 일반적인 언어환경에서 참이고 뒤쪽의 비교연산은 MySQL에서 했을 때 참입니다.

MySQL을 워낙 많은 나라에서 사용하기 때문에 서로 같은 것으로 취급하게 호환성을 지니게했다라고 들었는데, 사실은 기술적인 이유가 있는 건 아닐까 싶기도 합니다.

암튼 중요한 것은 로직을 짤 때 어떤 값을 필터링 하고 넘겨도 저런 문자로 대체함으로써 원하는 값을 넣을 수 있다는 것이죠

Admin -> Ạdmin 같이, 물론 되는 경우 있고 안 되는 경우 있더라고요, 좀 더 알아봐야 할 것 같아요

여담

  1. 보다 보니 table의 encoding세팅에 따라서 달라지는 것 같습니다.
  2. 다른 DBMS들에서는 해보지 않아 잘 모르겠네요

Reference