diff --git a/app/assets/javascripts/discourse/lib/markdown.js b/app/assets/javascripts/discourse/lib/markdown.js
index a28496cdbe8..7229b49c20f 100644
--- a/app/assets/javascripts/discourse/lib/markdown.js
+++ b/app/assets/javascripts/discourse/lib/markdown.js
@@ -14,6 +14,16 @@ var _validClasses = {},
function validateAttribute(tagName, attribName, value) {
var tag = _validTags[tagName];
+ // Handle possible attacks
+ // if you include html in your markdown, it better be valid
+ //
+ // We are SUPER strict cause nokogiri will sometimes "correct"
+ // this stuff "incorrectly"
+ var escaped = Handlebars.Utils.escapeExpression(value);
+ if(escaped !== value){
+ return;
+ }
+
// Handle classes
if (attribName === "class") {
if (_validClasses[value]) { return value; }
diff --git a/spec/components/pretty_text_spec.rb b/spec/components/pretty_text_spec.rb
index 682649077a0..f55219b75c7 100644
--- a/spec/components/pretty_text_spec.rb
+++ b/spec/components/pretty_text_spec.rb
@@ -76,6 +76,7 @@ describe PrettyText do
describe "Excerpt" do
context "images" do
+
it "should dump images" do
PrettyText.excerpt("",100).should == "[image]"
end
@@ -286,6 +287,10 @@ describe PrettyText do
it "allows bold chinese" do
PrettyText.cook("**你hello**").should match_html "
你hello
" end + + it "sanitizes attempts to inject invalid attributes" do + PrettyText.cook("