온라인 학습은 규모가 큽니다. 특히 자신을 개발자라고 생각하는 사람들에게 그렇습니다. Stack Overflow의 연례 개발자 설문 조사를 살펴보면(수만 개의 응답이 접수됨) 정식 교육을 받지 않은 개발자가 상당수 포함되어 있음을 알 수 있습니다.
설문조사 결과에서 강조된 부분을 주목하세요. 이것이 왜 사실인지에 대해 논문을 쓸 수 있지만, 학사 학위를 공부할 때 Pascal, C++, LISP로 썼다는 것만 말씀드리겠습니다. 제가 처음 맡은 정식 개발 직업은 C/C++가 필요했기 때문에 그 분야에서 성공할 수 있었습니다. 하지만 나중에는 자바를 배워야 했습니다. 그리고 SQL. 저는 그런 일을 하려고 학교에 돌아온 게 아니었습니다. 저는 책과 도움말 파일, 그리고 제가 손에 넣을 수 있는 모든 문서를 찾았습니다. 정식 교육을 받았든 받지 않았든 스스로 배우는 것이 일반적입니다. 기술은 변하고 전문가들은 새로운 언어나 프레임워크를 배우기 위해 학교로 돌아갈 시간이 없기 때문입니다.
저는 이런 일이 우리 중 누구에게나 드문 일이 아니라고 생각합니다. 우리는 새로운 CLI나 API를 배우기 위해 학교에 돌아가지 않습니다. 우리는 단지 Python이나 Node.js를 배우기 위해 새로운 학위에 등록하지 않습니다. 우리는 책과 인터넷 콘텐츠, 커뮤니티에 의지하고 "예시 코드"에 크게 의존합니다.
저는 여전히 블로그와 문서에 의존하는데, 이는 우리 회사의 엔지니어와 건축가뿐만 아니라 다른 사람들이 작성한 것도 포함합니다. 지금 박사학위를 신청해도 Express 프레임워크 나 JQuery 의 이면을 배우는 데는 별로 도움이 되지 않습니다.
네트워크 엔지니어와 운영(DevOps의 두 번째 흐름의 첫 번째 부분을 담당했기 때문에 이하 NetOps라고 함)도 필요한 도구와 기술을 능숙하게 다루는 데 필요한 기술을 얻기 위해 동일한 유형의 자료를 활용할 가능성이 높습니다. 방금 시청하신 분들을 위해 설명드리자면, 스크립팅 언어와 API입니다. 그리고 그들 역시 언어와 생산 파이프라인을 자동화하는 시스템에 익숙해지면서 마음껏 복사해서 붙여넣을 것입니다.
오늘 제가 글을 쓰는 이유는 다음과 같습니다. 예제 코드.
정말 많은 것이 있죠. 이건 좋은 코드인데, 제가 감사하지 않는다거나 예제 코드를 가치 없게 생각한다고 생각하지 마세요. 새로운 언어와 API를 배우려는 모든 사람에게 매우 귀중한 자료입니다. 제가 불평하고 싶은 건 예제 코드와 보안 사이에 해결해야 할 단절이 있다는 겁니다. 새로운 사람들에게 코딩을 가르칠 때, 보안에 대한 인식을 최소한 심어주어야지 노골적으로 무시할 수는 없습니다.
제가 이렇게 말하는 이유는 앱 보안이 선택 사항이 아니기 때문입니다. 다시 한 번 말씀드리지만 선택 사항이 아닙니다 . 저는 통계에 대해 계속 이야기할 수 있지만, 지금 이 시점에서 제가 설교하는 것이 합창단에 대한 설교가 되기를 바랍니다. 앱 보안은 선택 사항이 아니며, 개발의 일부로 간주될 때까지 그 태도를 널리 알리는 것이 중요합니다. 앱뿐만 아니라 DevOps와 NetOps의 손끝에서 자동화를 구동하는 스크립트와 시스템도 포함됩니다.
나는 이 예를 들어 내 불안의 근원을 제시합니다.
코드 자체는 아름답습니다. 정말. 형식이 좋고 간격도 좋습니다. 읽을 수 있음. 이 코드를 정말 좋아해요. 보안 규칙 0을 완전히 위반하는 부분을 제외하고요.
입력 내용을 정리해야 한다는 고개 끄덕임조차 없는 게 실망스럽습니다. 댓글에도 없고 기사 본문에도 없어요. 해당 코드는 악성 콘텐츠가 포함되어 있을 수 있다는 우려 없이 단지 "username"을 다른 함수에 전달합니다.
하지만 로리, 분명히 이 코드는 실제로 프로덕션에 들어가도록 설계되지 않은 어떤 것의 구현을 보여주기 위한 것입니다. 그것은 위험하지 않습니다.
요점은 그것이 아니다. 요점은 우리가 사람들에게 코딩을 계속 가르친다면 적어도 안전하게 코딩하는 방법을 가르치려는 시도를 해야 한다는 것입니다. C/C++를 처음 사용하는 개발자에게 자주 언급 하는 것처럼 포인터에 액세스하기 전에 메모리를 할당하지 않으면 충돌이 발생한다는 것입니다.
보안과 SDLC가 입으로만 언급되는 것에 대한 사례로 블로그를 가득 채울 수 있지만, 실제로는 사람들에게 코딩을 가르치고 세부적인 내용을 다루는 부분에서는 갑자기 SEP(다른 사람의 문제) 분야에 둘러싸인 한 구석에 홀로 있게 됩니다.
이는 웹 애플리케이션 방화벽 이 모든 앱 보안 전략에 있어서 중요한 구성 요소인 또 다른 이유입니다. 조직에서는 사용자 입력과 이를 합법적인 것으로 맹목적으로 받아들이는 앱 사이에 방화선이 필요하며, 이를 통해 앱 보안 취약점의 최신 희생자가 되는 것을 피할 수 있습니다.
우리가 코드 보안에 대해 이야기하고 싶어하더라도 실제로 다른 사람에게 가르칠 때는 실제로 실천하지 않습니다. 우리는 보안에 대한 이러한 관심 부족을 더 잘 인식해야 합니다. 이는 개발자(그리고 점점 더 많은 NetOps)가 배우는 부분이기 때문에 예제 코드에서도 마찬가지입니다. 그러나 이를 시작하기 전까지는 WAF와 같은 보안 솔루션이 필요하여 안전하지 않은 코드로 인해 생긴 틈을 메워야 합니다.
* 혹은 영어인 듯. 아, 저는 일부러 그러는 거예요. 때로는 잘못 말하는 게 재밌기도 하거든요.