Pro http://clojure.org/reader gibt es Regeln, für die Zeichen in Symbolen und Schlüsselwörtern gültig sind. (Vorerst alphanumerische Zeichen und *
, +
, !
, -
, _
und ?
.) Sie sollten niemals ein Symbol mit anderen Zeichen erstellen. Im Moment sind diese Regeln vom Compiler jedoch nicht vollständig aufgehoben.
Im besten Fall könnten Sie mit ungültigen Keywords enden. Im schlimmsten Fall könntest du mit bösen/gefährlichen enden, wie Michał Marczyk sagte . Denken Sie daran, dass #=()
zum Ausführen von beliebigem Code zur Lesezeit verwendet werden kann, so dass Sie nicht einmal eine Zeichenfolge auswerten müssen, damit schlimme Dinge passieren, Sie müssen sie nur lesen.
(keyword "foo #=(steal-passwords-and-delete-hard-drive)")
(Siehe (doc *read-eval*)
für, wie dieses Verhalten zu deaktivieren, aber schreib eval standardmäßig aktiviert ist.)
denke ich, allgemeine Regeln für die desinfizierenden Eingang Benutzer gelten hier. Definieren Sie genau, was Sie zulassen möchten, und verbieten Sie alles andere standardmäßig. Vielleicht erlauben Sie etwas wie die Regex #"[a-zA-Z0-9*+!-_?]+"
, mit möglicherweise anderen alphanumerischen Zeichen abhängig von der Sprache, die Sie sprechen.
"# =() kann verwendet werden, um beliebigen Code zur Lesezeit auszuführen, so dass Sie nicht einmal eine Zeichenfolge auswerten müssen, damit schlimme Dinge passieren, Sie müssen sie nur lesen." Das wusste ich nicht, danke. –