백엔드 개발에 native NodeJS를 직접 사용하지는 않겠지만 SQL 인젝션
에 대한 이해는 필요합니다. SQL注入
还是很有必要的。
本文使用 NodeJS
+ MySQL
对 SQL注入
进行讲解。
SQL注入攻击
是很古老的攻击方式了,自从 web2.0
诞生后就有 SQL注入攻击
。它通常出现在 输入框 、文本域 等前端组件中。在输入的内容里加入 SQL语句
,并一同传给后台。【相关教程推荐:nodejs视频教程】
后台一不小心就会将前端传过来的 SQL语句
拼接到自己的 SQL语句
中,最终拼接成一段攻击代码。
所以必须加以预防,不然有可能出现数据泄露,甚至被删库等可能。
SQL 注入演示
以登录为例,我在 MySQL
中添加一个 users
表,里面存储用户名和密码。
在 users
表中,我创建了一条数据:insert into users (username,
password, realname) values ('leihou', '123', '雷猴');
数据的意思是:
username: 'leihou'
password: '123'
realname: '雷猴'
此时,在 NodeJS
后台,我创建了一个登录方法
const mysql = require('mysql') // 创建连接对象 const con = mysql.createConnection({ host: 'localhost', // 地址 user: 'root', // 连接数据库的用户 password: '123456', // 连接数据库的密码 port: '3306', // 默认端口 database: 'testdb' // 数据库名 }) // 开始连接 con.connect() // 统一执行 sql 的函数 function exec(sql) { const promise = new Promise((resolve, reject) => { con.query(sql, (err, result) => { if (err) { reject(err) return } resolve(result) }) }) return promise } // 登录方法 const login = (username, password) => { const sql = ` select username, realname from users where username='${username}' and password='${password}'; ` console.log(sql) return exec(sql).then(rows => { return rows[0] || {} }) }
上面是登录方法。
最后可以通过 《NodeJS http请求》 里提到的方法创建一个接口给前端。由于接口部分不是本文重点,所以这里打算略过(让我偷懒吧)。
此时再创建一个 HTML
页面,大概生成一下内容,然后使用 Ajax
与后端对接。
如果你懒的话可以直接使用 postman
测试
根据上面的 登录方法 可以得知,前端输入以下内容就可以登录成功
- 用户名:leihou
- 密码:123
但如果此时,用户名输入的是 leihou' --
,注意 --
前后都有空格。那密码就可以随便输入了。
最后拼接出来的 SQL
语句是 select username, realname from users where username='leihou' -- ' and password='aslkfjsaf';
注意,密码我是随便输入的。
在 MySQL
里, --
代表注释的意思。所以上面的语句就变成 查询 username 为 leihou 的那条数据
。自然就绕过了密码。
上面输入的 username
的内容绕过登录,泄露了信息。但如果别人要删掉你的表,那后果就非常严重了。
比如在用户名输入框内输入:leihou'; delete from users; --
。
直接就把 users
表给删掉了。
防止方法
SQL注入攻击
实在太古老了,有十几年历史了。所以基本的应对方法都成熟了。
比如将前端传过来的字符串进行转码。
使用 NodeJS
下载的 MySQL
依赖包里就提供了这个方法:escape
。
// 省略部分代码 const mysql = require('mysql') // 省略创建连接对象 // 省略开始连接 // 统一执行 sql 的函数 exec 方法 const escape = mysql.escape const login = (username, password) => { username = escape(username) password = escape(password) const sql = ` select username, realname from users where username=${username} and password=${password}; ` console.log(sql) return exec(sql).then(rows => { return rows[0] || {} }) }
使用 escape
方法过滤后的字符串会被转义。
此时如果用户名输入 leihou' --
,在后端控制台会打印出如下内容:
select username, realname from users where username='leihou\' -- ' and password='123345';
可以看到 leihou'
后面的单引号被转义了。
以上就是 MySQL
防范 SQL注入攻击
NodeJS
+ MySQL
를 사용하여 SQL 삽입
을 설명합니다. SQL 주입 공격
은 아주 오래된 공격 방법입니다. web2.0
이 탄생한 이후로 SQL 주입 공격
이 있었습니다. 일반적으로 입력 상자
SQL 문
을 추가하고 함께 백그라운드로 전달합니다. [관련 추천 튜토리얼: nodejs 동영상 튜토리얼🎜]🎜🎜배경이 조심스럽지 않으면 전면 -end가 전송됩니다. 들어오는 SQL 문
은 자신의 SQL 문
으로 접합되고, 마지막으로 공격 코드로 접합됩니다. 🎜🎜따라서 예방 조치를 취해야 합니다. 그렇지 않으면 데이터가 유출되거나 데이터베이스가 삭제될 수도 있습니다. 🎜🎜SQL 주입 데모🎜
🎜 로그인을 예로 들어,MySQL
에 users
테이블을 추가하여 사용자 이름과 비밀번호를 저장합니다. 🎜🎜users
테이블에서 데이터 조각을 만들었습니다. 사용자(사용자 이름,
password, 실제 이름) 값에 삽입 ('leihou', ' 123', 'Thunder Monkey');
🎜🎜데이터 의미: 🎜사용자 이름: 'leihou'
비밀번호: ' 123 '
realname: 'Thunder Monkey'
NodeJS
백그라운드에서 , 제가 만든 로그인 방법이 있어요🎜rrreee🎜위가 로그인 방법입니다. 🎜🎜마지막으로 "NodeJS http에서 언급한 방법을 통해 프런트엔드용 인터페이스를 생성할 수 있습니다. 요청하세요🎜 . 인터페이스 부분은 이 글의 초점이 아니므로 여기서는 생략하겠습니다. 🎜🎜이때 또 다른 HTML
페이지를 생성하고 대략적인 컨텐츠를 생성한 후 Ajax
를 사용하여 백엔드와 연결합니다. 🎜🎜게으른 경우 postman
을 사용하여 직접 테스트할 수 있습니다🎜🎜
- 사용자 이름: leihou
- 비밀번호: 123
leihou' --
로 입력되어 있다면, 공백이 있기 전과 뒤에 --
가 사용된다는 점에 유의하세요. 그러면 아무렇게나 비밀번호를 입력할 수 있습니다. 🎜🎜마지막으로 연결된 SQL
문은 select username, realname from users where username='leihou' -- ' and Password='aslkfjsaf';
🎜🎜참고하세요 내가 무심코 입력한 비밀번호. 🎜🎜MySQL
에서 --
는 주석의 의미를 나타냅니다. 따라서 위의 문은 사용자 이름이 leihou인 데이터를 쿼리합니다
가 됩니다. 당연히 비밀번호는 우회됩니다. 🎜🎜위에 입력한 사용자 이름
의 내용은 로그인을 우회하여 정보가 유출됩니다. 그러나 다른 사람이 귀하의 테이블을 삭제하려고 한다면 그 결과는 매우 심각할 것입니다. 🎜🎜예를 들어 사용자 이름 입력 상자에 leihou'; 사용자에서 삭제; 🎜🎜<code>users
테이블을 직접 삭제하세요. 🎜🎜예방 방법🎜
🎜SQL 주입 공격
은 정말 너무 오래되어 10년이 넘었습니다. 그래서 기본적인 대처 방법은 성숙해졌습니다. 🎜🎜예를 들어 프런트 엔드에서 전달된 문자열을 트랜스코딩합니다. 🎜🎜NodeJS
를 사용하여 다운로드한 MySQL
종속성 패키지는 escape
메서드를 제공합니다. 🎜rrreee🎜 escape
메소드를 사용하여 필터링된 문자열은 이스케이프됩니다. 🎜🎜이 때, 사용자 이름이 leihou' --
를 입력하면 백엔드 콘솔에 다음 내용이 인쇄됩니다. 🎜rrreee🎜leihou'가 이스케이프되었습니다. 🎜🎜위는 <code>MySQL
이 SQL 주입 공격
을 방지하는 방법입니다. 🎜🎜노드 관련 지식을 더 보려면 🎜nodejs 튜토리얼🎜을 방문하세요! 🎜위 내용은 Node+mysql의 SQL 인젝션을 설명하는 글의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

예, JavaScript의 엔진 코어는 C로 작성되었습니다. 1) C 언어는 효율적인 성능과 기본 제어를 제공하며, 이는 JavaScript 엔진 개발에 적합합니다. 2) V8 엔진을 예를 들어, 핵심은 C로 작성되며 C의 효율성 및 객체 지향적 특성을 결합하여 C로 작성됩니다.

JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.

Python은 데이터 과학 및 자동화에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 데이터 처리 및 모델링을 위해 Numpy 및 Pandas와 같은 라이브러리를 사용하여 데이터 과학 및 기계 학습에서 잘 수행됩니다. 2. 파이썬은 간결하고 자동화 및 스크립팅이 효율적입니다. 3. JavaScript는 프론트 엔드 개발에 없어서는 안될 것이며 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축하는 데 사용됩니다. 4. JavaScript는 Node.js를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.

C와 C는 주로 통역사와 JIT 컴파일러를 구현하는 데 사용되는 JavaScript 엔진에서 중요한 역할을합니다. 1) C는 JavaScript 소스 코드를 구문 분석하고 추상 구문 트리를 생성하는 데 사용됩니다. 2) C는 바이트 코드 생성 및 실행을 담당합니다. 3) C는 JIT 컴파일러를 구현하고 런타임에 핫스팟 코드를 최적화하고 컴파일하며 JavaScript의 실행 효율을 크게 향상시킵니다.

실제 세계에서 JavaScript의 응용 프로그램에는 프론트 엔드 및 백엔드 개발이 포함됩니다. 1) DOM 운영 및 이벤트 처리와 관련된 TODO 목록 응용 프로그램을 구축하여 프론트 엔드 애플리케이션을 표시합니다. 2) Node.js를 통해 RESTFULAPI를 구축하고 Express를 통해 백엔드 응용 프로그램을 시연하십시오.

웹 개발에서 JavaScript의 주요 용도에는 클라이언트 상호 작용, 양식 검증 및 비동기 통신이 포함됩니다. 1) DOM 운영을 통한 동적 컨텐츠 업데이트 및 사용자 상호 작용; 2) 사용자가 사용자 경험을 향상시키기 위해 데이터를 제출하기 전에 클라이언트 확인이 수행됩니다. 3) 서버와의 진실한 통신은 Ajax 기술을 통해 달성됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

WebStorm Mac 버전
유용한 JavaScript 개발 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음
