PHP가이를 방지하는 Prepared Statements를 가지고있는 것과 같은 방식으로 Node.js (가급적 모듈 사용)에서 SQL 주입을 방지 할 수 있습니까?
그렇다면 어떻게? 그렇지 않은 경우 내가 제공 한 코드를 우회 할 수 있는 몇 가지 예는 무엇입니까 (아래 참조).
일부 컨텍스트 :
node-mysql 모듈을 사용하여 Node.js + MySql로 구성된 백엔드 스택으로 웹 애플리케이션을 만들고 있습니다. 유용성의 관점에서, 모듈은 매우 중요하지만, 아직 PHP의 유사 뭔가를 구현하지 않은 문 준비 (나는 그것이에 알고 있어요하지만 할 일 ).
필자가 이해 한 바에 따르면 PHP의 준비된 명령문 구현은 무엇보다도 SQL 삽입을 방지 하는 데 크게 도움이되었습니다 . 하지만 기본적으로 제공되는 문자열 이스케이프 (아래 코드 스 니펫 참조)를 사용 하더라도 내 node.js 앱이 유사한 공격에 노출 될 수 있다는 점이 걱정 됩니다.
node-mysql은 node.js를위한 가장 인기있는 mysql 커넥터 인 것 같습니다. 그래서 다른 사람들이이 문제를 설명하기 위해 무엇을하는지 궁금합니다. (사용자 / 클라이언트 측 입력이 관련되어 있기 때문에 이것이 어떻게 될지 확실하지 않습니다).
준비된 명령문을 제공하므로 당분간 node-mysql-native 로 전환해야합니까 ? 이것은 node-mysql만큼 활동적이지 않은 것 같기 때문에 주저합니다.
다음은 새니 타이 저 모듈 을 사용하는 사용자 등록 코드 와 node-mysql의 준비된 문과 유사한 구문 (위에서 언급했듯이 문자 이스케이프를 수행함)을 사용하여 사이트 간 스크립팅 및 SQL 삽입을 각각 방지하는 코드입니다.
// Prevent xss
var clean_user = sanitizer.sanitize(username);
// assume password is hashed already
var post = {Username: clean_user, Password: hash};
// This just uses connection.escape() underneath
var query = connection.query('INSERT INTO users SET ?', post,
function(err, results)
{
// Can a Sql injection happen here?
});