2020년 3월 25일 보안정보 스크래핑

2020년 3월 25일 보안정보 스크래핑 3월 25일 보안정보 스크래핑 ==================================================================== + 주요 취약점 - 메일전송 프로토콜을 이용한 원격 명령어 실행 주의 권고 외 1건 1. 메일전송 프로토콜을 이용한 원격 명령어 실행 주의 권고 최근 OpenSMTPD* 취약점이 발견되는 등 메일전송 프로토콜에서 원격 명령어 실행이 가능하여 주의를 권고함 공격자는 취약점을 악용하여 피해를 발생시킬 수 있으므로, 해결방안을 참고하여 조치 필요 - https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=35302 2. Django 제품 SQL Injection 취약점 보안 업데이트 권고 최근 Django*에서 SQL Injection취약점(CVE-2020-9402)을 악용할 수 있는 개념증명코드(Proof of concept, PoC)가 인터넷상에 공개되어 사용자의 보안 업데이트 필요 - https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=35301 ==================================================================== + 취약점 - Apple Safari 취약점 1. Apple Safari 취약점 Apple Safari security bypass CVE-2020-3885 - https://exchange.xforce.ibmcloud.com/vulnerabilities/178339 Apple Safari security bypass CVE-2020-3887 - https://exchange.xforce.ibmcloud.com/vulnerabilities/178338 Apple Safari inform...

KKU likelion django project (1)

KKU likelion django project (1)

---

title: "LikeLion KKU 첫 Review"

date: 2019-10-04 00:00:00 -0400

categories: jekyll update

---

# 안녕!

오랜만에 코딩을 하여 어려워할 여러분들에게

이 글들은 수정 예정! 또한 블로그도 리뉴얼될 예정입니닷

오타와 맞춤법은 후에 수정할게요!

## 사전작업

vscode에서 해당하는 폴더를 열어줍니다.

'파일 -> 폴더 열기'

vscode에서 `ctrl` + `shift` + `~`를 눌러 명령창(터미널)을 열어줍니다.

## python –m venv 가상환경명

```python –m venv myvenv```

위의 명령어를 치고 나면 myvenv라는 가상환경 폴더가 생성됩니다.

가상환경명은 아무거나 정할 수 있지만 보통 `myvenv`나 `venv`같은 네이밍을 사용한다고 합니다.

복잡하게 지으면 명령어를 칠 때 헷갈리게 되어 힘듭니다.

## 가상환경 실행하기

```source myvenv/Scripts/activate```

가상환경을 설치하였다면 실행해주면 됩니다.

(`source` 대신 `.` 을 입력해도 된다고 합니다.)

가상환경머신이 켜진다면 `(myvenv)` 란개 생깁니다. 그렇다면 가상환경이 실행되었다는 뜻입니다.

이는 자신의 가상환경 머신이름입니다.

## django개발을 할 때는 무조건! 가상환경부터 키고 시작한다.

## 가상환경끄기

가상환경을 끄려면 vscode 혹은 명령창을 꺼도 되지만 명령창에서 `ctrl` + `c`를 눌러도 꺼집니다.

혹은 `deactivate`

## django 설치하기

(가상환경이 켜진 상태여야 합니다.)

```pip install django```

특정 버전을 설치하려면 pip install django==2.1.8 등 있습니다.

여기서 pip란 파이썬 관련 패키지 (누군가가 만들어 놓은 파이썬 프로그램들)를 설치하기 위해 사용되는 명령어입니다.

install 은 설치하라는 것이며 uninstall는 삭제하라는 명령어입니다.

django까지 설치가 되었다면 프로젝트를 시작하여 봅시다.

## project 시작하기

```django-admin startproject postproject```

django-admin을 이용하여 project를 생성합니다.

생성하였으면 postproject란 폴더 안에 postproject가 또 있습니다.

제일 최상단에 있는 폴더 postproject를 project로 안 헷갈리게 바꿔줍니다.

후 명령창에 `cd project` 명령어를 입력하여 현재 위치를 project로 이동하여줍니다.

## app 만들기

```python manage.py startapp postapp```

project에 들어왔다면 app을 만들어 줍시다. 그렇다면 project폴더에는 app과 project가 있습니다.

## app을 만들면 해야 할 것

app 안에 templates란 폴더를 만들어줍니다. `s` 주의

`templates` 폴더 안에 `home.html`을 만들어 줍니다.

`views.py`에 함수를 설정하여 줍니다.

```

def home(request):

return render(request, 'home.html')

```

이제 `project`에 있는 셋팅으로 들어갑니다.

`INSTALLED_APPS` 안에 app이 생성되었단 걸 알려줍니다.

```'postapp.apps.PostappConfig',```

postapp이란 폴더 안에 있는 apps란 파일 안에 있는 PostappConfig란 함수를 가져옵니다.

주의해야 할 점은 '' 끝에 있는 `,`입니다.

그리고 url을 연결해 줍니다.

`project`안에 있는 `urls.py`에 들어가

```import postapp.views```

포스트 앱에 있는 뷰스를 임폴트 해줍니다.

또한 urlpatterns에 path를 추가해줍니다.

```path('', postapp.views.home, name='home'),```

## django 서버 실행하기

```python manage.py runserver```

를 명령창에 쳐서 home.html에 내용이 나오나 확인합니다.

## model 만들기

model을 만들어 봅시다. model은 어디서 들어봤을 데이터베이스(DB)라는 것이 이 model을 의미합니다.

먼저 3개만 넣어서 model을 만들어 봅시다.

`제목` `본문` `작성일자`

post를 적기 위하여 필요한 제목과 본문 그리고 작성일자입니다. 그러므로 postapp에 있는 model을 사용합니다.

```class Post(models.Model):

title = models.CharField(max_length=200)

pub_date = models.DateTimeField('date published')

body = models.TextField()

```

이와 같이 코드를 입력합니다. class 명을 지을 때에는 꼭 첫 글자를 대문자로 지으세요. 이건 개발자 간의 약속입니다.

코드를 설명해 보자면

```

1. title 속성은 최대 length가 200인 문자열로 형성할 거야.

2. pub_date 속성은 날짜와 시간으로 형성할 거야.

3. body 속성은 긴 문자열로 형성할 거야.

```

Post란 붕어빵 틀을 만든다는 걸 저번에 말했던 거 기억할 것입니다.

이 붕어빵 틀에 다양한 정보를 넣어 팥 붕어빵, 슈크림 붕어빵, 고구마 크림 붕어빵 등 다양하게 만들 수 있는 틀을 만든 것입니다.

위와 같이 model을 작성했으면 이제 `python manage.py`로 추가적인 명령을 내려줘야 합니다. 이건 기억하고 갑시다. model을 만들고 싶다면..

```

1. `models.py`에서 코드 작성

2. `python manage.py makemigrations` 을 통해 migration 만들기

3. `python manage.py migrate` 을 통해 데이터베이스에 적용하기

```

migration란 django는 DB(데이터베이스)를 지원하지 않습니다. 그래서 우리가 내린 python코드를 DB가 알아듣게 설명을 해 줘야 하는 작업이 필요합니다. 위의 makemigrations는 내가 짠 파이썬 코드를 DB가 알아들을 수 있게 번역하는 명령어이고, migrate는 DB에 그 내용을 적용하라는 명령어입니다.

그렇다면 무슨 DB를 쓰느냐?

셋팅에 77번째 줄 (다를 수 있습니다.)

DATABASES를 보면 sqlite3을 사용하는 것을 볼 수 있습니다.

## admin페이지

자. 이제 뭘 만들었으면 잘 만들어졌는지 아닌지 확인을 해야 하는데 어떻게 확인을 해야 할까요. 게시글을 직접 등록해 보면 되겠네요. 이럴 때 유용하게 쓸 수 있는 중요한 사이트가 있습니다. 바로 admin 페이지죠.

admin 페이지는 사이트 관리자가 콘텐츠를 편집할 수 있는 통합적인 인터페이스를 제공합니다. 물론 사용 목적에 따라 수정해야 할 일이 다분하지만, 제공해주는 것이 어딥니까. 사이트 관리자를 위한 페이지. 즉, 여러분을 위한 공간입니다.

127.0.0.1/admin 으로 접속하면 admin 페이지가 나옵니다.

하지만 그전에 admin 계정을 만들어줘야 합니다.

## admin 만들기

```python manage.py createsuperuser```

admin을 만드는 명령은 createsuperuser입니다. 슈퍼유저를 만들라고 명령을 내리면 아이디와 이메일 주소, 비밀번호를 입력하라는 내용이 터미널에 나옵니다.

신중하게 작성하도록 합시다. (password 입력 시 아무것도 안 나오는 것 같아도 당황하지 맙시다. 보안상의 이유로 보이지 않을 뿐 키보드는 정상 작동합니다.)

작성을 열심히 했으면, 만든 아이디와 비밀번호를 가지고 웹페이지로 돌아가 로그인해봅시다.

## admin에 model 등록하기

postapp 폴더 안으로 들어가 보면 admin.py라는 파일이 있습니다.

안에 두줄을 추가해 줍시다.

```

from .models import Post

admin.site.register(Post)

```

첫째줄은 '같은 폴더 위치에 있는 models라는 파일에, Post라는 클래스를 가져오라'는 소리고, 맨 밑에 줄은 'admin이라는 site에 Post라는 클래스를 등록해라'라는 말입니다.

이제 admin계정으로 로그인을 하면

Post란 붕어빵 틀이 만들어진 걸 볼 수 있게 됩니다.

하지만 아직 완성된 게 아닙니다.

글을 작성하여 보면 `Post object(1)`이라는게 생겼습니다.

이는 게시글이 작성된 순서로 저장되는 1번째 게시글이라고 생각하면 됩니다.

하지만 우리는 게시글의 번호가 아닌 무슨 게시물인지 보고 싶습니다.

이를 위하여 model class 아래에

```

class Post(models.Model):

title = models.CharField(max_length=200)

pub_date = models.DateTimeField('date published')

body = models.TextField()

def __str__(self):

return self.title

```

두줄을 추가해줍시다.

이는 title를 보여주란 함수입니다. 이는 pub_date가 될 수도 있고 body가 될 수도 있습니다.

두줄을 추가해 준 뒤 저장을 해줍니다.

왜 마이그레이션은 안 하나요?

마이그레이션은 붕어빵 틀을 전부 바꿔야 할 때 혹은 새로운 틀을 만들었을 때에만 사용합니다.

- 안녕

>- 잘 작동될까요?

You'll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated.

To add new posts, simply add a file in the `_posts` directory that follows the convention `YYYY-MM-DD-name-of-post.ext` and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works.

Jekyll also offers powerful support for code snippets:

​```python

def print_hi(name):

print("hello", name)

print_hi('Tom')

​```

Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll's GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk].

[jekyll-docs]: https://jekyllrb.com/docs/home

[jekyll-gh]: https://github.com/jekyll/jekyll

[jekyll-talk]: https://talk.jekyllrb.com/

공유하기 글 요소 저작자표시

from http://integer-ji.tistory.com/20 by ccl(A) rewrite - 2020-03-07 10:54:56

댓글

이 블로그의 인기 게시물

엑스브레인(XBrain) 기업 정보

django 설치 방법

[aws] deploy Angular app with s3 | AWS S3로 angular 앱 배포하기