1.SQL 주입
SQL 주입, 일반적으로 제출 또는 웹 양식에 삽입 된 SQL 명령을 통해 도메인 이름이나 페이지 요청 쿼리 문자열을 입력하고, 궁극적으로 악의적 인 SQL 명령을 실행하기 위해기만 서버를 얻을 수 있습니다.
SQL 인젝션 예
로그인 화면, 백엔드 (사용자 이름)과 암호 (패스워드)에서, MySQL 데이터베이스는 사용자가 사용자 입력을 기반으로 사용자의 신원을 확인합니다.
다음과 같이 사용자가 될 것 백엔드 처리, 접합 SQL 문에서, 사용자 이름 [세드릭, 비밀번호 [123456]를 입력 할 때 인증 사용자 이름과 암호 성공, 즉 성공적으로 로그인.
// 用户名为 cedric , 密码为 123456
select username from users where username='cedric' and password='123456';
악의적 인 사용자가 입력 창에 사용자 이름을 입력하는 경우에는, [세드릭 '-], 및 임의의 에러 코드 [111], 후단의 처리에서, 다음의 SQL 명령문 스티치를 실시한다 (가 마지막 얼굴 공간 참고) 로그인에 성공.
// 符号 ‘--’ 后面的语句相当于被注释了
select username from users where username='cedric -- ' and password='111';
악의적 인 사용자가 사용자 이름을 입력 할 경우 또는, [세드릭을 '; 사용자에서 삭제 -] 백엔드 처리, 접합 SQL 문은 다음과 같은 작업을 수행 할 때 입력 상자와 임의의 에러 코드 [111]에서, 결과는 데이터베이스를 일으킬 수 있습니다 모든 사용자가 삭제됩니다.
// 符号 ‘--’ 后面的语句相当于被注释了
select username from users where username='cedric';delete from users; -- ' and password='111';
SQL 주입 방지
노드 환경, 탈출 기능 처리 MySQL의 입력을 사용하여 매개 변수는 특수 문자를 탈출 할 수 있습니다.
입력 SQL의 모든 부분에서 우리는 탈출 기능 등으로 처리 할 수 있습니다 :
const login = (username, password) => {
// 预防 sql 注入
username = escape(username)
password = escape(password)
const sql = `
select username from users where username=${username} and password=${password};
`
// 然后按上面语句执行 sql 查询
···
}
2. XSS 공격
XSS는 웹 응용 프로그램에서 컴퓨터의 보안 취약점, 그것은 악의적 인 웹 사용자 코드 사용자에 의해 사용되는 다른 페이지에 제공하기 위해 이식 (코드는 HTML 코드와 클라이언트 측 스크립트를 포함한다) 할 수 있습니다.
XSS는 예를 공격
같은 텍스트 상자에 입력으로 출시 XSS 공격은 주로 입력 / 텍스트 영역 텍스트 상자의 형태에 관한 것이다 :
<script> alert(1) </script>
프런트 엔드 필터 (예 : 노드)를 백 엔드에 직접 제출되지, 서버가 페이지를 입력하기 위해 데이터베이스 저장소, 그 다음 (또는 다른 사용자)에 직접 필터링하지 않을 경우,이 실행됩니다 alert(1)
, 팝업 페이지를.
쿠키 값은 웹 페이지를 훔쳐
또는 악의적 인 입력 텍스트 상자 :
<script> alert(document.cookie) </script>
당신은 사용자 쿠키를 얻을 수 있습니다.
악성 트래픽 하이재킹 달성 점프
악성 입력 텍스트 상자 :
<script>window.location.href="www.abc.com";</script>
사이트 방문을 선도하면 자동으로 www.abc.com으로 이동합니다.
XSS 공격 방지
즉에서 사용자 HTML 인코딩 엔티티에 의해 입력 된 데이터 <script>
, <a>
라벨처럼 < >
후 변환하고 다시 데이터베이스에 저장된다.
노드 환경에서 설치 :
$ npm install xss
그런 다음 수정 :
const xss = require('xss')
const inputValue = content // 未进行 xss 防御
const inputValue = xss(content) // 已进行 xss 防御
그런 다음 입력 상자에 악의적 인 입력을 입력하면 <script> alert(1) </script>
, 데이터베이스 다음 문에서 변환 및 저장됩니다 :
<script> alert(1) </script>
그것은 수행 할 수 없습니다 도달 <script>
목적.