Skip to content

fix(config.sample): remove Host Header Injection risk in OAuth redirectUri + doc improvements#122

Merged
marpisco merged 5 commits intomainfrom
docs/update-080426
Apr 8, 2026
Merged

fix(config.sample): remove Host Header Injection risk in OAuth redirectUri + doc improvements#122
marpisco merged 5 commits intomainfrom
docs/update-080426

Conversation

@marpisco
Copy link
Copy Markdown
Owner

@marpisco marpisco commented Apr 8, 2026

redirectUri was built from $_SERVER['HTTP_HOST'] without validation, enabling Host Header Injection in the OAuth flow. Reviewer comments also flagged hardcoded placeholder credentials and missing security guidance.

Changes

src/config.sample.php

  • Replace dynamic redirectUri with a static placeholder; add explicit comment warning against using $_SERVER['HTTP_HOST'] directly
  • Clear clientId/clientSecret values (were 'clientid'/'clientsecret') and replace example provider URLs with generic exemplo.dominio.pt placeholder
  • Add security note to keep clientSecret confidential
// IMPORTANTE: Manter o clientSecret confidencial e nunca o expor publicamente.
// O redirectUri deve ser um URL estático/configurado explicitamente — não use $_SERVER['HTTP_HOST']
// diretamente pois pode ser manipulado (Host Header Injection).
$provider = new GenericProvider([
    ...
    'clientId'     => '',
    'clientSecret' => '',
    'redirectUri'  => 'https://exemplo.dominio.pt/login'
]);

README.md

  • Qualify PHP 8.4 as recommended/tested version rather than a hard requirement
  • Re-add MariaDB/MySQL user setup step (lost in previous refactor), pointing to Manual do Técnico

marpisco added 2 commits April 8, 2026 10:48
…ncias. Simplificar o que deve ser simplificado.
remove english comments and put portuguese comments only. make the comments more clear. add a little bit of more information regarding the stuff that is in the configuration

add reference to the future configuration that will be created in the docs file.
Copilot AI review requested due to automatic review settings April 8, 2026 10:07
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 8, 2026

📝 Manual Update Required? It looks like you've modified core logic. Please check if the user manual needs a refresh! @marpisco

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Atualiza documentação e o ficheiro de configuração de exemplo do ClassLink (plataforma de reserva de salas/materiais), alinhando textos e reorganizando secções para refletir mudanças feitas em 08/04/2026.

Changes:

  • Reorganização e tradução/ajuste de comentários no src/config.sample.php (DB/email/OAuth).
  • Atualização do README.md para listar dependências (incluindo versão de PHP) e simplificar instruções.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 6 comments.

File Description
src/config.sample.php Ajustes de documentação/configuração de exemplo para DB/email/OAuth (comentários e estrutura).
README.md Atualiza a secção inicial para “Dependências” e altera requisitos/instruções de instalação.

Comment on lines +25 to +27
/// caso a autenticação seja por starttls, usar PHPMailer::ENCRYPTION_STARTTLS
/// caso a autenticação seja por ssl, usar PHPMailer::ENCRYPTION_SMTPS
/// caso não seja necessário autenticação, por false na opção autenticacao, e não importar-se para os outros
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Os comentários usam /// nas linhas seguintes, enquanto o resto do ficheiro usa // e /* */. Em PHP /// não tem semântica especial (não é docblock) e pode confundir; sugiro normalizar para // ou um bloco /* ... */.

Suggested change
/// caso a autenticação seja por starttls, usar PHPMailer::ENCRYPTION_STARTTLS
/// caso a autenticação seja por ssl, usar PHPMailer::ENCRYPTION_SMTPS
/// caso não seja necessário autenticação, por false na opção autenticacao, e não importar-se para os outros
// caso a autenticação seja por starttls, usar PHPMailer::ENCRYPTION_STARTTLS
// caso a autenticação seja por ssl, usar PHPMailer::ENCRYPTION_SMTPS
// caso não seja necessário autenticação, por false na opção autenticacao, e não importar-se para os outros

Copilot uses AI. Check for mistakes.
README.md Outdated
Comment on lines 14 to 17
- PHP 8.4
- Servidor Web (recomendo o Caddy)
- MariaDB ou MySQL (oficialmente recomendo o MariaDB)
- Composer (para o Windows, descarregar [esta versão](https://getcomposer.org/Composer-Setup.exe))
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O README fixa a dependência em PHP 8.4, mas o composer.json não declara um requisito de versão de PHP. Para evitar confusão/instalações falhadas, sugiro alinhar: ou documentar como "testado/recomendado" (indicando também o mínimo suportado) ou adicionar o constraint de PHP no composer.json.

Suggested change
- PHP 8.4
- Servidor Web (recomendo o Caddy)
- MariaDB ou MySQL (oficialmente recomendo o MariaDB)
- Composer (para o Windows, descarregar [esta versão](https://getcomposer.org/Composer-Setup.exe))
- PHP 8.4 (versão recomendada/testada)
- Servidor Web (recomendo o Caddy)
- MariaDB ou MySQL (oficialmente recomendo o MariaDB)
- Composer (para o Windows, descarregar [esta versão](https://getcomposer.org/Composer-Setup.exe))
- Usar uma versão de PHP compatível com as dependências resolvidas pelo Composer.

Copilot uses AI. Check for mistakes.
Comment on lines +12 to 20
## Dependências

- Necessário um servidor com PHP e uma DB MariaDB
- PHP 8.4
- Servidor Web (recomendo o Caddy)
- MariaDB ou MySQL (oficialmente recomendo o MariaDB)
- Composer (para o Windows, descarregar [esta versão](https://getcomposer.org/Composer-Setup.exe))
- Com o composer, fazer `composer install` através de um terminal, para instalar as dependências.
- Montar o utilizador usando as instruções [na wiki](https://github.com/marpisco/ClassLink/wiki/Configura%C3%A7%C3%A3o-MYSQL) (brevemente haverá mais documentação na Wiki)

Informações específicas (e mais bem explicadas) estarão no Manual do Técnico.
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ao renomear a secção de instalação para "Dependências" foi removido o passo que apontava para as instruções de criação/configuração do utilizador MySQL/MariaDB. Se essa configuração continua necessária (criação do user/permissões), o README fica incompleto para uma instalação nova; sugiro reintroduzir um link/passo equivalente (Wiki/Manual do Técnico) nesta secção.

Copilot uses AI. Check for mistakes.
…stão Copilot)

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings April 8, 2026 10:12
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 8, 2026

📝 Manual Update Required? It looks like you've modified core logic. Please check if the user manual needs a refresh! @marpisco

…stão Copilot)

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 8, 2026

📝 Manual Update Required? It looks like you've modified core logic. Please check if the user manual needs a refresh! @marpisco

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

Comment on lines +11 to +15
'servidor' => 'localhost',
'user' => 'reservasalas',
// Defina uma password forte antes de usar em produção e restrinja as permissões deste utilizador da DB ao mínimo necessário.
'password' => '',
'db' => 'reservasalas',
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O config.sample.php ainda inclui uma password de base de dados hardcoded ('salaspass'). Mesmo sendo um ficheiro de exemplo, isto aumenta o risco de alguém usar credenciais fracas/iguais em produção e também expõe um valor que pode acabar reutilizado. Sugestão: deixar o valor vazio (ou placeholder) e reforçar no comentário que deve ser definido externamente e com permissões mínimas.

Copilot uses AI. Check for mistakes.
Comment on lines 40 to 43
'urlResourceOwnerDetails' => 'https://authentik.devenv.marcopisco.com/application/o/userinfo/',
'clientId' => 'clientid', // CHANGE THIS
'clientSecret' => 'clientsecret', // CHANGE THIS and keep it secret
'clientId' => 'clientid',
'clientSecret' => 'clientsecret',
'redirectUri' => 'https://' . $_SERVER['HTTP_HOST'] . '/login'
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

redirectUri é construído diretamente a partir de $_SERVER['HTTP_HOST'], o que pode abrir espaço a Host Header Injection (e redirecionamentos OAuth inesperados) se o Host não for validado. Sugestão: usar uma base URL fixa no config (ex.: variável de ambiente) ou reutilizar um helper que valide o host (ex.: getBaseUrl() já faz validação em func/email_helper.php).

Copilot uses AI. Check for mistakes.
@marpisco
Copy link
Copy Markdown
Owner Author

marpisco commented Apr 8, 2026

@copilot apply changes based on the comments in this thread

…th e melhorar README

Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/136a1ba0-355d-45b4-b974-2baa56a53dc5

Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 8, 2026

@copilot apply changes based on the comments in this thread

Feito no commit db31569. As alterações aplicadas:

  • src/config.sample.php: substituído $_SERVER['HTTP_HOST'] por um URL estático de exemplo (https://exemplo.dominio.pt/login) no redirectUri, adicionado aviso de segurança sobre Host Header Injection e para manter o clientSecret confidencial; valores placeholder de clientId/clientSecret mudados para strings vazias.
  • README.md: versão de PHP clarificada como "recomendada/testada"; adicionada referência ao Manual do Técnico para a criação do utilizador/base de dados MariaDB/MySQL.

Copilot AI changed the title docs(readme): atualizar os documentos, data 08/04/2026 fix(config.sample): remove Host Header Injection risk in OAuth redirectUri + doc improvements Apr 8, 2026
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 8, 2026

📝 Manual Update Required? It looks like you've modified core logic. Please check if the user manual needs a refresh! @marpisco

@marpisco marpisco merged commit 5d7ca50 into main Apr 8, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants