mirror of
https://github.com/labring/FastGPT.git
synced 2025-10-15 23:55:36 +00:00
34 lines
1.0 KiB
TypeScript
34 lines
1.0 KiB
TypeScript
// Function to escape CSV fields to prevent injection attacks
|
|
export const sanitizeCsvField = (field: String): string => {
|
|
if (field == null) return '';
|
|
|
|
let fieldStr = String(field);
|
|
|
|
// Check for dangerous starting characters that could cause CSV injection
|
|
if (fieldStr.match(/^[\=\+\-\@\|]/)) {
|
|
// Add prefix to neutralize potential formula injection
|
|
fieldStr = `'${fieldStr}`;
|
|
}
|
|
|
|
// Handle special characters that need escaping in CSV
|
|
if (
|
|
fieldStr.includes(',') ||
|
|
fieldStr.includes('"') ||
|
|
fieldStr.includes('\n') ||
|
|
fieldStr.includes('\r')
|
|
) {
|
|
// Escape quotes and wrap field in quotes
|
|
fieldStr = `"${fieldStr.replace(/"/g, '""')}"`;
|
|
}
|
|
|
|
return fieldStr;
|
|
};
|
|
|
|
export const generateCsv = (headers: string[], data: string[][]) => {
|
|
const sanitizedHeaders = headers.map((header) => sanitizeCsvField(header));
|
|
const sanitizedData = data.map((row) => row.map((cell) => sanitizeCsvField(cell)));
|
|
|
|
const csv = [sanitizedHeaders.join(','), ...sanitizedData.map((row) => row.join(','))].join('\n');
|
|
return csv;
|
|
};
|