Commit graph

390 commits

Author SHA1 Message Date
El RIDO
52c0846dad
Merge pull request #1734 from PrivateBin/php85
Enable PHP 8.5 testing and handle deprecations
2025-12-03 19:10:03 +01:00
El RIDO
4f28c357ae
Merge pull request #1715 from PrivateBin/i18n/soften-html-encoding
fix: do not encode source JSON translation string resulting in wrong display of special characters like '
2025-12-03 19:07:17 +01:00
El RIDO
6f778eeec3
address PHP 8.5 deprecation 2025-12-02 06:54:36 +01:00
El RIDO
348d36d6ee
prefer DirectoryIterator for readability, also test jbo translation, log deletion errors 2025-11-20 09:13:15 +01:00
El RIDO
b4db5f8e57
apply null coalescing operator, strict equality, avoid aliases, prefer empty 2025-11-20 08:19:14 +01:00
rugk
72d4c7aa2b style: clarify comments 2025-11-13 12:33:31 +00:00
rugk
e676264616 test: make I18nTest actually reload English translations again 2025-11-13 12:28:03 +00:00
rugk
38a722d2f5 test: make sure to unset HTTP_ACCEPT_LANGUAGE at test teardown 2025-11-13 12:19:49 +00:00
rugk
2c4dd2594c fix: do not encode source JSON translation string resulting in wrong display of special characters like '
Fixes #1712

Disclosure: Coded with help of Copiot. (description wrtten by me)

So this does indeed loosen the encoding a bit. However, IMHO, it was neither better before though. You could always bypass the encoding for `args{0]` when  you just include `<a` (or the other tag) somewhere or so.

**One important notice:** This was (due to the exceptions before and afterwards) valid before and also now: Translators **could** (and can) if they have malicious intent, inject/do "XSS attacks".
Thus, translations PRs (also from Crowdin) should be reviewed for wild HTML code inside translations. I suppose this is easy to fix, but anyway a valid risk.

But IMHO, we should teat the JSON files being part of our source code as a "trusted source". In the end, such an attak is basicaly just ends up being injecting malicious code. I hope such contributors would be detected.

References I explicitly checked again to not introduce an XSS here: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html and the PHP doc for he HTML encoding.

I feel the safter way obviously would be encoding the _whole_ string _after_ translation (just like you should apply DOMPurify after everything), but as explained it was not done before and would break compatibility. Also, I looked through the sources and I see no risk described by doing it only for the "dangerous" "untrusted" inputs.
Only here is a notice that `%s` shall not be used in some contexts, for example to define a tag: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html#dangerous-contexts (obviously in such a case, attacks may be possible even with encoding; but again; this is nothing new)

The basic "problem" of it all is: We want HTML to be translated/be usable in our translation. If we'd get rid of that, we would get for sure rid of all such XSS attack possibilities. But that woud be a bigger refactoring, so IMHO, this here is fine for a fix for the issue at hand.

Ah another point: I think the `is_int` check is harmless, but it's also kinda useless. Maybe it is some kind of obscure performance optimisation. (Yeah ints have nothing to encode as they have nothing that could be used for XSS, but they could also just be passed through that function.)
2025-11-13 10:52:08 +00:00
El RIDO
f48544978b
apply StyleCI suggestion 2025-11-12 07:57:30 +01:00
El RIDO
f2164353c3
use realpath and validate tpl directory contents
to ensure only php files inside the tpl dir can get used as templates
2025-11-11 09:34:54 +01:00
El RIDO
dae5f7fd61
partially revert #1559
Instead of automatically adding custom templates, we log an error if
that template is missing in the available templates. Still mitigates
arbitrary file inclusion, as the string is now checked against a fixed
allow list.
2025-11-10 17:31:35 +01:00
El RIDO
5f6c2beb3b
Unit test on escaping the template directory 2025-11-10 12:00:29 +01:00
El RIDO
85962a537a
fix php unit tests & SRI hash 2025-10-06 23:53:13 +02:00
El RIDO
4cd1770c76
fix indentation, tests & unify plural forms
command used was:
jq --indent 4 '(.. | select(type=="array")) |= . + [(.[-1:][] | sub("3rd";"4th")),(.[-1:][] | sub("3rd";"5th"))]' i18n/pl.json > /tmp/pl.json

test fix & plural unification was done manually, also cross-checking with online translation services
2025-10-06 11:40:28 +02:00
El RIDO
bd61a3d021
enable tests to pass
The path is only optional when it is / and the very last element, otherwise it is required. As soon as it is in the middle of a URL it helps the parser to identify which part is the username and domain and what is path and GET parameters. The @ sign is legitimate, if unusual, in the latter two.
2025-09-03 20:13:33 +02:00
rugk
a6034ace1b test: PHP considers this invalid 2025-09-03 14:25:04 +00:00
rugk
616635c66c style: scruintizer wants some trailing comma 2025-09-03 14:21:00 +00:00
rugk
e4f2383dd8 test: more test cases for testForeignUrlUsingUsernameTrick 2025-09-03 14:20:03 +00:00
rugk
168fed64b9 chore: apply Scruintizer diff 2025-09-03 14:11:35 +00:00
rugk
4f13d93af2 style: use explicit types 2025-09-03 13:53:51 +00:00
rugk
f76704a88c refactor: simplify tests 2025-09-03 13:48:28 +00:00
rugk
dbaa70ec11 test: move ftp example to rejected because of foreign URL 2025-09-03 13:45:30 +00:00
rugk
fae7e233f3 test: write some tests for testing proxy ensurance 2025-09-03 12:38:44 +00:00
Karthik Kasturi
77395c147f updated test cases, added clarity in error messages 2025-08-20 01:23:06 +00:00
Karthik Kasturi
39e527915e Add test cases for shlink 2025-08-19 23:55:32 +00:00
Karthik Kasturi
0be1cef224 i18n updates 2025-08-19 21:39:16 +01:00
Karthik Kasturi
7ec8bc6ef1 chore: moved proxy classes to different folder and namespaces 2025-08-19 20:34:39 +01:00
Karthik Kasturi
4a39a2ad0f refactor: added AbstractProxy base class for shortener proxies 2025-08-15 23:28:44 +01:00
Karthik Kasturi
0808052acf Added shlink integration 2025-08-15 00:07:51 +01:00
El RIDO
bde805d2f1
replaced the term "paste" with the more generic "document"
kudos @Ribas160
2025-07-25 08:16:08 +02:00
El RIDO
ddd2d72064
replaced the term "paste" with the more generic "document"
Some of the references to "paste" in code or comments got changed as well, but to clarify the intended usage of the terms:

- A PrivateBin document can consist of a paste text (key "paste" in the encrypted payload) and one or several attachments and discussion entries.
- Internally the root document is called a "Paste" and each discussion entry is called a "Discussion".
- When referring to a whole document with one paste and optional discussion(s), we call it just "document".
- When talking about a particular JSON payload type in the internal logic, i.e. during storage or transmission, we call them a paste or discussion to distinguish which type we refer to.

closes #397
2025-07-24 10:46:31 +02:00
Ribas160
863cb89ad9
Switch from binary bytes to SI-units 2025-07-23 21:06:20 +03:00
El RIDO
734b85eb08
remove more v1 remnants
kudos @Ribas160
2025-07-21 12:28:40 +02:00
El RIDO
cdb8010f6d
Merge branch 'master' into drop-legacy-zerobin-support 2025-07-21 11:42:47 +02:00
Ribas160
273b11e1b4 Fix bootstrap template fallback in unit tests 2025-07-21 09:30:30 +03:00
El RIDO
009f53e5fd
fix deprecated creation of dynamic property
caught by Scrutinizer after upgrading from PHP 7.4 to 8.2
2025-07-19 21:30:05 +02:00
El RIDO
c99e6895dd
remove more v1 remnants
kudos @Ribas160
2025-07-19 20:09:37 +02:00
El RIDO
410cc909ce
Merge branch 'master' into drop-legacy-zerobin-support 2025-07-17 08:00:09 +02:00
El RIDO
71587cddaf
Merge branch 'master' into drop-legacy-zerobin-support 2025-07-16 06:10:08 +02:00
El RIDO
7b444bf62b
update test to use a Jdenticon 2025-07-05 19:40:37 +02:00
El RIDO
b79ae4e929
remove more v1 legacy
- document removed unused columns in database schema of tables `paste` & `comment`
- amended misleading comments
- nickname is part of the encrypted payload in v2 comments and therefore there is nothing to store separately
2025-07-05 18:19:38 +02:00
El RIDO
8668e7b366
removed support for privatebin_data, privatebin_db & zerobin_db model class configurations
kudos @Ribas160 for suggesting this
2025-07-05 17:45:02 +02:00
El RIDO
f7cf389f36
remove v1 backend support and version checks in the frontend 2025-07-05 17:21:12 +02:00
El RIDO
6d5323e351
drop legacy paste format support
remove support for ZeroBin & v1 pastes and base64 & rawinflate libraries
2025-07-05 11:06:30 +02:00
Ribas160
3d3d80c60b Remove page template 2025-07-02 17:38:13 +03:00
El RIDO
964b4da50a
Merge pull request #1545 from PrivateBin/fixes
Fixes for zlib caching & handling undefined globals
2025-06-27 16:49:00 +02:00
Ribas160
44f8cfbfb8 Fix error when a custom template is not in the default available templates list 2025-06-18 14:51:11 +03:00
El RIDO
c08a792f01
handle undefined global, fixes #1544 2025-05-18 21:15:39 +02:00
El RIDO
6347b6193e
replicate reported error 2025-05-18 20:52:46 +02:00