On Mon, Sep 2, 2013 at 6:25 AM, abp <abp...@gmail.com> wrote:

> clojars uses https://github.com/ato/**clojars-web/blob/master/src/**
>> clojars/web/safe_hiccup.clj<https://github.com/ato/clojars-web/blob/master/src/clojars/web/safe_hiccup.clj>
>>
>> which automatically escapes.
>
>
> But that double escapes attribute values if you don't put them in
> raw-calls.
>
>
Yes, it double escapes attributes. In addition, doctype helpers like
`html5` might need to be redefined to use a `(raw ...)` for some parts.
There might be other functions where a `(raw ...)` is needed. The changes
in that file have proven sufficient for clojars, and I much prefer the
escape by default semantics, but more work might be needed for others.

Additionally, CSRF protection can happen with ring-anti-forgery.  The
clojars source link above includes a `form-to` function that is a
replacement for hiccup's `form-to` that adds the token on any
non-get/non-head forms.  It does require adding anti-forgery to the
middleware stack.

----

Several of Yesod's responses to other items on the list are humorous in
there vagueness, but in my experience for clojure:

1.Injection:   Done by JDBC's prepared statements, and clojure.jdbc's use
of them
2. XSS injection:   Depends on templating.  Hiccup requires explicit `(h
..)` calls.  laser is escape by default.  I am unsure about enlive,
clabango, or others.
3. Authentication & Session Management:  I've used friend for
authentication, and bcrypt for encryption.  lib-noir has some functions
that use bcrypt, but I've not used it. Session management can be specified
by the :store given to wrap-session, and defaults to a in memory store.  A
cookie store also exists that provides some protection against cookie
mutation.  Immutant provides a store that can work across a cluster.
4. Insecure Reference:  There is not a standard ORM or similar, so handling
only the correct parameters is up to you.
5. CSRF:  ring-anti-forgery provides a way to add CSRF prevention tokens
6. Security Misconfiguration: This seems to be the domain of chef, pallet,
puppet, capistrano or another deployment tool.  I'm not sure I want my
libraries to mess with deployments.
7. Insecure Cryptographic Storage: Use bcrypt. See 3.
8. Failure to Restrict URL access: I've used friend for authorization.
9. Insufficient Transport Layer Protection: I'd recommend letting your
front end server handle this and redirect to https.  I believe lib-noir has
a middleware that will redirect from http to https if needed. Consider
passing `:secure true` to `wrap-cookies` if you have an https only site.
10. Unvalidated Redirects and Forwards: Url generation is a weakspot in a
compojure based setup. For comparison, pedestal-service wrote its own
routing dsl and stores the routes in a way that allows url generation based
on the context passed in.

I believe the use of many small libraries is what causes the lack of a
single spot for this documentation. I've picked up most of what I described
above by knowing the authors / what to google / asking + watching irc.
 That does seem like an unfortunate situation for anyone new to have to
learn.

-
Nelson Morris

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to