Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
@wertarbyte/local-ftp-sftp
Advanced tools
Treat local, FTP and SFTP files the same way. 100% Node.js, no other software needed. Under the hood, this library uses the popular ssh2-sftp-client and ftp packages.
npm i --save @wertarbyte/local-ftp-sftp
Class hierarchy
interface FileSystem
├── class LocalFileSystem
├── class FtpFileSystem
└── class SftpFileSystem
interface FileInfo
├── class LocalFileInfo
├── class FtpFileInfo
└── class SftpFileInfo
const localFileSystem = new LocalFileSystem();
const ftpFileSystem = await FtpFileSystem.create({
host: '127.0.0.1',
port: 21,
user: 'user1',
password: '12345',
connectionOptions: {}, // optional, see below
});
const sftpFileSystem = await SftpFileSystem.create({
host: '127.0.0.1',
port: 22,
user: 'user1',
password: '12345', // optional if you configure private key authentication using the connection options
connectionOptions: {}, // optional, see below
});
The connectionOptions
option is optional and is passed through to the connect methods of the underlying ftp or ssh2-sftp-client instance. You can use this for advanced configuration, e.g. FTPS settings or private key authentication for SFTP.
interface FileSystem {
list(path: string): Promise<FileInfo[]>;
put(src: NodeJS.ReadableStream, toPath: string): Promise<void>;
get(path: string): Promise<Buffer>;
getStream(path: string): Promise<NodeJS.ReadableStream>;
mkdir(path: string, recursive: boolean): Promise<void>;
rmdir(path: string, recursive: boolean): Promise<void>;
delete(path: string): Promise<void>;
rename(oldPath: string, newPath: string): Promise<void>;
exists(path: string): Promise<FileType | false>;
close(): Promise<void>;
}
interface FileInfo {
readonly name: string;
readonly size: number;
readonly type: FileType;
readonly isDirectory: boolean;
}
// constants for all examples
const host = '127.0.0.1';
const port = 21; // or 22 for SFTP
const user = 'root';
const password = 'password';
using Promise/then/catch
// You could just replace FtpFileSystem with SftpFileSystem for SFTP instead of FTP
FtpFileSystem.create({ host, port, user, password })
// Or: SftpFileSystem.create({ host, port, user, password })
.then((ftpFileSystem) => {
// List remote files
ftpFileSystem
.list('/home')
.then((files) => {
console.log('Files:', files);
})
.catch((err) => {
console.log('Could not retrieve directory /home', err);
});
})
.catch((err) => {
console.log('Error while connecting to FTP server:', err);
});
using Promise/then/catch
var localFileSystem = new LocalFileSystem();
SftpFileSystem.create({ host, port, user, password })
// Or: FtpFileSystem.create({ host, port, user, password })
.then((sftpFileSystem) => {
// Get the local file as a stream
localFileSystem.get('/Users/dennis/catpic.jpeg').then((readStream) => {
// Now, upload the file to the SFTP server
sftpFileSystem.put('/home/uploaded_catpic.jpeg', readStream).then(() => {
console.log('Important file was uploaded successfully, meow!');
});
});
})
.catch((err) => {
console.log('Error while uploading file:', err);
});
using await
const ftpFileSystem = await FtpFileSystem.create({ host, port, user, password });
const sftpFileSystem = await SftpFileSystem.create({ hort, port, user, password });
const readStream = await ftpFileSystem.get('/home/catpic.jpeg');
await sftpFileSystem.put(readStream, '/var/catpic.jpeg');
using await
const ftpFileSystem = await FtpFileSystem.create({ host, port, user, password });
// Create the directory
await ftpFileSystem.mkdir('/home/catpics');
// Create directory and sub-directories (recursively: true)
await ftpFileSystem.mkdir('/home/even/more/catpics', true);
// Delete the newly created directory (Only works on empty directories)
await ftpFileSystem.rmdir('/home/catpics');
// Delete directory with content (recursively: true)
await ftpFileSystem.rmdir('/home/even/more/catpics', true);
FAQs
Treat Local, FTP and SFTP file systems the same way.
The npm package @wertarbyte/local-ftp-sftp receives a total of 10 weekly downloads. As such, @wertarbyte/local-ftp-sftp popularity was classified as not popular.
We found that @wertarbyte/local-ftp-sftp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.