предотвратить взлом невидимой формы - PullRequest
2 голосов
/ 12 января 2012

Резюме

Если для формы установлено значение display:none и ее поля заполнены произвольным html кодом с помощью javascript, какой тип очистки данных / обеспечения безопасности формы требуется при отправке?

Фон

Я использую плагин JQuery DataTables для переформатирования и отображения данных, подытогнутых группой. Он прекрасно работает, за исключением одной маленькой ложки мази: экспорт таблицы в PDF (или другие формы) через расширение TableTools приводит к исходному формату, а не к сгруппированному и промежуточному формату. После обсуждения с автором DataTables / TableTools я пришел к выводу, что мне нужно экспортировать другим способом.

Я сделал кнопку, которая передает измененный html таблицы, а не оригинальный html, в php-скрипт, который использует mpdf для создания pdf-файла. Это делается путем заполнения «невидимой» формы и последующей ее отправки. Отлично работает.

Но я обеспокоен тем, что наличие невидимой формы, которая передает html, делает меня широко открытым для злоупотреблений. Каковы наилучшие способы обеспечения того, чтобы ввод POST был тем, что я ожидаю, когда ввод произвольный?

код

<!--HTML-->
<button name='Make PDF' id='butPDF'/>

<form action='makepdf.php' method='post' name='mpdf' 
      id='mpdf' style='display:none'>
  <textarea name='pdf_html'></textarea>
</form>

//javascript
$(document).ready(function() {
  $('.datatable').dataTable( {
    //process table into desired format      
  });

  $('button#butPDF').onClick(
    function(){
       var html= get_my_stuff();//collect up the desired bits
       $('textarea[name="pdf_html"]').val(html);
       $('form#mpdf).submit();
    }
  );
});

<?php
include(_MPDF_PATH . "mpdf.php");

$html=$_POST['pdf_html'];
$stylesheet = file_get_contents(LOCAL_INCLUDE.'css/mpdf.css');

$mpdf=new mPDF();
$mpdf->WriteHTML($stylesheet,1,true);
$mpdf->WriteHTML($html, 2,false);
$mpdf->Output('myfile.pdf','D'); //D for download
exit;
?>

1 Ответ

0 голосов
/ 12 января 2012

Возможно, добавьте еще одно поле формы и проверьте, заполнено ли оно также.Проверьте, заполнено ли после отправки, тогда вы знаете, что форма была принудительно заполнена ботом.

...