mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2026-04-16 03:19:37 +00:00
Decorate hte attachment download and generic web provider with the NoPrivateNetworkHttpClient
This is for security hardening to prevent SSRF attacks
This commit is contained in:
parent
f12f808b34
commit
ad35ae6e9e
2 changed files with 9 additions and 3 deletions
|
|
@ -44,6 +44,7 @@ use App\Exceptions\AttachmentDownloadException;
|
||||||
use App\Settings\SystemSettings\AttachmentsSettings;
|
use App\Settings\SystemSettings\AttachmentsSettings;
|
||||||
use Hshn\Base64EncodedFile\HttpFoundation\File\Base64EncodedFile;
|
use Hshn\Base64EncodedFile\HttpFoundation\File\Base64EncodedFile;
|
||||||
use Hshn\Base64EncodedFile\HttpFoundation\File\UploadedBase64EncodedFile;
|
use Hshn\Base64EncodedFile\HttpFoundation\File\UploadedBase64EncodedFile;
|
||||||
|
use Symfony\Component\HttpClient\NoPrivateNetworkHttpClient;
|
||||||
use const DIRECTORY_SEPARATOR;
|
use const DIRECTORY_SEPARATOR;
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
use RuntimeException;
|
use RuntimeException;
|
||||||
|
|
@ -95,6 +96,8 @@ class AttachmentSubmitHandler
|
||||||
UserAttachment::class => 'user',
|
UserAttachment::class => 'user',
|
||||||
LabelAttachment::class => 'label_profile',
|
LabelAttachment::class => 'label_profile',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
$this->httpClient = new NoPrivateNetworkHttpClient($this->httpClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -373,6 +376,7 @@ class AttachmentSubmitHandler
|
||||||
],
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
$response = $this->httpClient->request('GET', $url, $opts);
|
$response = $this->httpClient->request('GET', $url, $opts);
|
||||||
//Digikey wants TLSv1.3, so try again with that if we get a 403
|
//Digikey wants TLSv1.3, so try again with that if we get a 403
|
||||||
if ($response->getStatusCode() === 403) {
|
if ($response->getStatusCode() === 403) {
|
||||||
|
|
@ -434,8 +438,8 @@ class AttachmentSubmitHandler
|
||||||
$new_path = $this->pathResolver->realPathToPlaceholder($new_path);
|
$new_path = $this->pathResolver->realPathToPlaceholder($new_path);
|
||||||
//Save the path to the attachment
|
//Save the path to the attachment
|
||||||
$attachment->setInternalPath($new_path);
|
$attachment->setInternalPath($new_path);
|
||||||
} catch (TransportExceptionInterface) {
|
} catch (TransportExceptionInterface $exception) {
|
||||||
throw new AttachmentDownloadException('Transport error!');
|
throw new AttachmentDownloadException('Transport error: '.$exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
return $attachment;
|
return $attachment;
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ use Brick\Schema\Interfaces\Thing;
|
||||||
use Brick\Schema\SchemaReader;
|
use Brick\Schema\SchemaReader;
|
||||||
use Brick\Schema\SchemaTypeList;
|
use Brick\Schema\SchemaTypeList;
|
||||||
use Symfony\Component\DomCrawler\Crawler;
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
use Symfony\Component\HttpClient\NoPrivateNetworkHttpClient;
|
||||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
|
|
||||||
class GenericWebProvider implements InfoProviderInterface
|
class GenericWebProvider implements InfoProviderInterface
|
||||||
|
|
@ -55,7 +56,8 @@ class GenericWebProvider implements InfoProviderInterface
|
||||||
private readonly ProviderRegistry $providerRegistry, private readonly PartInfoRetriever $infoRetriever,
|
private readonly ProviderRegistry $providerRegistry, private readonly PartInfoRetriever $infoRetriever,
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$this->httpClient = (new RandomizeUseragentHttpClient($httpClient))->withOptions(
|
//Use NoPrivateNetworkHttpClient to prevent SSRF vulnerabilities, and RandomizeUseragentHttpClient to make it harder for servers to block us
|
||||||
|
$this->httpClient = (new RandomizeUseragentHttpClient(new NoPrivateNetworkHttpClient($httpClient)))->withOptions(
|
||||||
[
|
[
|
||||||
'timeout' => 15,
|
'timeout' => 15,
|
||||||
]
|
]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue