mirror of
https://github.com/perlbot/perlbuut-pastebin
synced 2025-06-07 14:17:26 -04:00
Fix html injections
This commit is contained in:
parent
c1490cd15c
commit
559459e710
4 changed files with 102 additions and 41 deletions
11
app.pl
11
app.pl
|
@ -87,7 +87,7 @@ sub get_eval {
|
|||
|
||||
get '/' => sub {
|
||||
my $c = shift;
|
||||
$c->stash({pastedata => q{}, channels => \%channels, viewing => 0, page_tmpl => 'editor.html.tt'});
|
||||
$c->stash({pastedata => q{}, channels => \%channels, page_tmpl => 'editor.html'});
|
||||
$c->render("page");
|
||||
};
|
||||
get '/pastebin' => sub {$_[0]->redirect_to('/')};
|
||||
|
@ -112,8 +112,8 @@ get '/edit/:pasteid' => sub {
|
|||
my $row = $dbh->selectrow_hashref("SELECT * FROM posts WHERE id = ? LIMIT 1", {}, $pasteid);
|
||||
|
||||
if ($row->{when}) {
|
||||
$c->stash({pastedata => $row->{paste}, channels => \%channels, viewing => 0});
|
||||
$c->stash({page_tmpl => 'editor.html.tt'});
|
||||
$c->stash({pastedata => $row->{paste}, channels => \%channels});
|
||||
$c->stash({page_tmpl => 'editor.html'});
|
||||
|
||||
$c->render('page');
|
||||
} else {
|
||||
|
@ -128,9 +128,10 @@ get '/pastebin/:pasteid' => sub {
|
|||
my $row = $dbh->selectrow_hashref("SELECT * FROM posts WHERE id = ? LIMIT 1", {}, $pasteid);
|
||||
|
||||
if ($row->{when}) {
|
||||
$c->stash({pastedata => $row->{paste}, channels => \%channels, viewing => 1});
|
||||
$c->stash($row);
|
||||
$c->stash({page_tmpl => 'editor.html.tt'});
|
||||
$c->stash({page_tmpl => 'viewer.html'});
|
||||
$c->stash({eval => get_eval($pasteid, $row->{paste})});
|
||||
$c->stash({paste_id => $pasteid});
|
||||
|
||||
$c->render('page');
|
||||
} else {
|
||||
|
|
BIN
pastes.db
BIN
pastes.db
Binary file not shown.
|
@ -20,35 +20,23 @@
|
|||
|
||||
[% BLOCK page_header %]
|
||||
<div class="row">
|
||||
[% IF viewing %]
|
||||
<div class="col-md-3">
|
||||
<b>Who: </b>[% who %]
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<b>When: </b>[% when %]
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<b>What: </b>[% what %]
|
||||
</div>
|
||||
[% ELSE %]
|
||||
<div class="col-md-3">
|
||||
<label for="name">Who: </label>
|
||||
<input size="20" name="name" placeholder="Anonymous" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label for="chan">Where: </label>
|
||||
<select name="chan" id="chan">
|
||||
<option value="">-- IRC Channel --</option>
|
||||
[% FOREACH channel = channels %]
|
||||
<option value="[% channel.key %]">[% channel.value %]</option>
|
||||
[% END %]
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="desc">What: </label>
|
||||
<input size="40" name="desc" placeholder="I broke this" />
|
||||
</div>
|
||||
[% END %]
|
||||
<div class="col-md-3">
|
||||
<label for="name">Who: </label>
|
||||
<input size="20" name="name" placeholder="Anonymous" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label for="chan">Where: </label>
|
||||
<select name="chan" id="chan">
|
||||
<option value="">-- IRC Channel --</option>
|
||||
[% FOREACH channel = channels %]
|
||||
<option value="[% channel.key %]">[% channel.value %]</option>
|
||||
[% END %]
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="desc">What: </label>
|
||||
<input size="40" name="desc" placeholder="I broke this" />
|
||||
</div>
|
||||
</div>
|
||||
[% END %]
|
||||
|
||||
|
@ -62,14 +50,12 @@
|
|||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="editors">
|
||||
<textarea name="paste" id="paste" cols="80" rows="25">[% pastedata %]</textarea>
|
||||
<textarea name="paste" id="paste" cols="80" rows="25">[% pastedata | html %]</textarea>
|
||||
<pre id="editor">
|
||||
</pre>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
[% UNLESS viewing %]
|
||||
<input value="Submit" type="submit" id="submit" />
|
||||
[% END %]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -84,10 +70,6 @@
|
|||
//editor.setTheme("ace/theme/twilight");
|
||||
editor.session.setMode("ace/mode/perl");
|
||||
|
||||
[% IF viewing %]
|
||||
editor.setReadOnly(true);
|
||||
[% END %]
|
||||
|
||||
function resizeAce() {
|
||||
var h = window.innerHeight;
|
||||
if (h > 360) {
|
78
templates/viewer.html
Executable file
78
templates/viewer.html
Executable file
|
@ -0,0 +1,78 @@
|
|||
[% BLOCK body_style %]
|
||||
<style type="text/css" media="screen">
|
||||
#editor {
|
||||
margin: auto;
|
||||
position: relative !important;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
html, body, #content {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
[% END %]
|
||||
|
||||
[% BLOCK page_header %]
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<b>Who: </b>[% who | html %]
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<b>When: </b>[% when %]
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<b>What: </b>[% what | html %]
|
||||
</div>
|
||||
</div>
|
||||
[% END %]
|
||||
|
||||
[% BLOCK body %]
|
||||
<form action="/edit/[% paste_id %]" method="GET" id="form">
|
||||
<div id="content" class="container">
|
||||
<div class="panel">
|
||||
<div class="panel-heading">
|
||||
[% PROCESS page_header %]
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<pre id="editor">[% paste | html %]</pre>
|
||||
</div>
|
||||
<div id="eval" class="col-md-6">
|
||||
<h3>Program Output:</h3>
|
||||
<pre>[% eval | html %]</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<input value="Fork and Edit" type="submit" id="submit" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script src="/static/ace/ace.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script>
|
||||
var editor = ace.edit("editor");
|
||||
//editor.setTheme("ace/theme/twilight");
|
||||
editor.session.setMode("ace/mode/perl");
|
||||
|
||||
editor.setReadOnly(true);
|
||||
|
||||
function resizeAce() {
|
||||
var h = window.innerHeight;
|
||||
if (h > 360) {
|
||||
$('#editor').css('height', (h - 175).toString() + 'px');
|
||||
}
|
||||
};
|
||||
$(window).on('resize', function () {
|
||||
resizeAce();
|
||||
});
|
||||
resizeAce();
|
||||
|
||||
$("#submit").on('click', function () {
|
||||
$("#paste").text(editor.getValue()); // copy to the textarea
|
||||
});
|
||||
|
||||
</script>
|
||||
[% END %]
|
Loading…
Add table
Reference in a new issue