Browse Source

Harden url validation in logo endpoint

pull/7330/head
Thomas Kaul 1 day ago
parent
commit
855d6b1a22
  1. 9
      apps/api/src/app/logo/get-logo.dto.ts
  2. 3
      apps/api/src/app/logo/logo.controller.ts
  3. 2
      apps/api/src/app/logo/logo.service.ts

9
apps/api/src/app/logo/get-logo.dto.ts

@ -0,0 +1,9 @@
import { IsUrl } from 'class-validator';
export class GetLogoDto {
@IsUrl({
protocols: ['http', 'https'],
require_protocol: true
})
url: string;
}

3
apps/api/src/app/logo/logo.controller.ts

@ -12,6 +12,7 @@ import {
import { DataSource } from '@prisma/client'; import { DataSource } from '@prisma/client';
import { Response } from 'express'; import { Response } from 'express';
import { GetLogoDto } from './get-logo.dto';
import { LogoService } from './logo.service'; import { LogoService } from './logo.service';
@Controller('logo') @Controller('logo')
@ -41,7 +42,7 @@ export class LogoController {
@Get() @Get()
public async getLogoByUrl( public async getLogoByUrl(
@Query('url') url: string, @Query() { url }: GetLogoDto,
@Res() response: Response @Res() response: Response
) { ) {
try { try {

2
apps/api/src/app/logo/logo.service.ts

@ -47,7 +47,7 @@ export class LogoService {
private async getBuffer(aUrl: string) { private async getBuffer(aUrl: string) {
const blob = await this.fetchService const blob = await this.fetchService
.fetch( .fetch(
`https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=${aUrl}&size=64`, `https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=${encodeURIComponent(aUrl)}&size=64`,
{ {
headers: { 'User-Agent': 'request' }, headers: { 'User-Agent': 'request' },
signal: AbortSignal.timeout( signal: AbortSignal.timeout(

Loading…
Cancel
Save