전체 글
-
Apache설정 중 발생할 수 있는 보안 오류와 Path Traversa취약점보안/WEB 2021. 6. 22. 17:14
보안 오류 시나리오. VirtualHost, MainHost의 여부와 상관없이, DocumentRoot를 최상위(/)로 설정하는 것. Host에 대한 설명은 다음 링크 참고*(link) 에 대한 Require을 all grated로 주는 것(+Indexes FollowSymLinks까지 주면 환상..) 즉 사용자가 서버의 최상위Dir에 접속할 수 있는 경우이다. 이는 서버 작업 중 편의를 위해 설정할 수 있으나, 반드시 실제 배포시에 수정되어야할 설정이다. DocumentRoot만 잘 설정해주어도 발생할 염려가 적다. 이 Directory관련한 일반적인 보안 이슈는 Path Traversa이다. 이는 사용자가 파일을 요청할 때 상대경로를 이용하여 파일을 요청하는 것으로, DocumentRoot를 잘 설정..
-
MySQL terminal - Multi Line 입력 수정WEB|DB/DB 2021. 6. 21. 21:59
시나리오 Table을 만들거나 수정사항이 많을 때, 가독성을 위하여 Enter를 이용하고는 한다. 하지만, 엔터를 입력하고 보니 윗 줄에 입력된 것에 잘못된 사항이 생겼다. 해결책 Edit 모드로 들어가 수정한다. \e를 입력하고 엔터를 친다. 그러면 $EDITOR에 해당하는 기본 text editor로 변경할 수 있다. edit 명령에 대한 공식문서 설명은 다음과 같다. 추가 : 해당 입력내용을 저장하고 싶다면 다음의 방법을 이용할 수 있다. :w !sudo tee % https://pmandocom.tistory.com/71 VIM(VI) - Readonly파일, 권한오류파일 작성하기. 위 명령은 Bash Command({cmd})를 실행한다. 이때 주어진 범위의 내용을 Bash Command의 ST..
-
프로그래밍 SWAP(교환) 알고리즘에 대한 고찰(c, python)프로그래밍 2021. 6. 11. 19:00
프로그래밍의 가장 기본이되는 알고리즘인 swap알고리즘에 대해 알아보겠습니다. swap알고리즘은 말 그대로 두 변수에 있는 수를 교환하는 방법입니다. SWAP을 구현하는 방법에 대해 알아봅시다. ●(공통)이 swap을 구현하는 가장 일반적인 방법은, 이용하는 방법입니다. ●(Python) 이 임시변수 없이 다음과 같은 코드로 swap을 구현할 수 있습니다. x, y = y, x ●(공통)비트연산자인 XOR을 이용하여 임시변수를 사용하지 않고 swap을 구현할 수 있습니다. 원리 숫자 a, b가 있다고 하였을 때, a^b^a의 결과는 b입니다. 이유 교환법칙을 적용한다면 자기 자신(a^a)을 xor하게되고 이것의 결과는 0이 되기 때문입니다. (a^b^a == a^a^b == b) 예시) 110 ^ 001..
-
Python - 달팽이 배열 설명(1)프로그래밍/Python 2021. 6. 8. 00:48
달팽이 배열 달팽이 배열은 주어진 수(n)에 맞춰 nxn의 이중 배열을 생성하여, 시계 방향으로 숫자가 순차적으로 저장되는 배열입니다. 달팽이 배열의 구현 아이디어 1. 한 변의 길이가 주어진 정사각형의 최외각에 숫자를 채워넣는 함수를 제작합니다. n=5일때의 결과는 아래 예시와 같을 것입니다. 2. 바깥에서 부터 1의 과정을 반복하여 한겹씩 채워나갑니다. 여기에서 알 수 있는 것을 알아봅시다. 위 예시 그림에서 사각형의 크기는 5->3->1로 -2의 차이를 보이고 있습니다. 2차원 리스트로 주어졌을 때, 각 반복마다(흰->초록->주황) 시작위치는 (0,0) -> (1,1) -> (2,2)가 됩니다. 이를 구현해봅시다. 혹시나 이해가 되지 않는 부분이 있다면, 망설이지 말고 댓글로 남겨주세요. 😀 1. ..
-
Python - lambda expr에 대한 상세한 설명.프로그래밍/Python 2021. 6. 6. 00:13
기본 정의 및 사용법 (lambda forms라고도 불리는) Lambda 표현(expression)은 익명의 함수(이름이 존재하지 않는, 선언 당시에만 사용하는 (해석)함수) (anonymous functions)를 만들기 위해 사용됩니다. lambda Expression은 function object를 yield시킵니다. yield에 대한 설명은 다음 링크를 참조하십시오. (link) (yield를 모르는 독자를 위해 간단히 말하자면, yield는 return(반환)과 비슷한 역할을 합니다.) Expression(표현, 문법) lambda_expr ::= "lambda" [parameter_list] ":" expression 람다표현식은 다음과 같이 정의됩니다. lambda [parameter_lis..
-
Python - List Comprehension(리스트 표현식)프로그래밍/Python 2021. 6. 4. 16:14
List Comprehensions : 리스트 표현식 리스트 표현식은 리스트를 만드는 간결한 방식을 제공합니다. 비교 : 리스트 표현식과 기존의 방식들 예제 : 0~10의 제곱수를 담은 squares라는 리스트를 만들어보자. squares = [] for x in range(10): squares.append(x**2) 문제점 : x라는 변수가 loop 이후에도 존재. squares = list(map(lambda x: x**2, range(10))) squares = [x**2 for x in range(10)] 방식2와 비교하였을 때, 보다 간결하고 가독성이 뛰어나다는 것을 알 수 있습니다. 리스트 표현식(listcomp)는 expression과 뒤에 따라오는 for문, 그 뒤에 따라오는n개의 for..
-
PyQt 폴더 선택프로그래밍/Python 2021. 5. 29. 18:09
file = str(QFileDialog.getExistingDirectory(self, "Select Directory")) 원문, 참고 https://stackoverflow.com/questions/4286036/how-to-have-a-directory-dialog how to have a directory dialog In PyQt, how does one display a file browser that shows and selects only directories (not files)? And how does one retrieve the name of the selected directory? stackoverflow.com
-
JavaScript ==(동등 연산자), ===(일치 연산자)에 대한 고찰프로그래밍/JavaScript 2021. 4. 29. 23:43
먼저 결론부터 var var1=?, var2=?; //?는 어떤 자료형의 데이터라고 생각하자. var1 === var2; // 의미 : var1 == var2 && typeof(var1) == typeof(var2) var1 !== var2; // 의미 : var1 != var2 || typeof(var1) != typeof(var2) 연산자 이름의 영문 표기를 보면 보다 확실하다. == : equal operator === : strict equal operator ps. JavaScript는 "10" == 10 : true로 취급한다.. (아.. 이런..) 결과