我的场景如下所示,我在屏幕上显示数据库分页网格。 我想添加一个按钮来下载 CSV 电子表格。 所以我编写了这样的代码:
$(function(){
var file_complete = false;
var final_sql = $('.initiate_download').val();
var orderby = $('#search_submit').data('orderby');
var $posturl = $url + "index.php/Spawner/launch_spawner";
$('#downloadModal').modal('hide');
$('.initiate_download').on("click", function(e) {
e.preventDefault();
$('#pleaseWait').html($html);
setTimeout(function() {
$.ajax({ // initiate download
url: $posturl,
type: "POST",
data: {
final_sql: final_sql,
orderby: orderby,
report: $report
},
success: function(data) {
var download_id = data;
// console.log(download_id);
check_download_status(download_id);
}
})
}, 2000);
})
});
<div class="row top-buffer">
<button id="search_submit" class="btn btn-primary initiate_download" type="submit" value="<?php echo $sql; ?>" data-orderby="<?php echo $orderby;?>" name="final_sql_lic" >Download List</button>
<span id="pleaseWait"> </span>
</div>
它工作正常,但问题是您可以使用查看页面选项查看 SQL,是否有解决方法?
最佳答案
大多数人所做的是他们不在页面上嵌入 SQL,而是公开在幕后处理 SQL 内容的 URL。
在您的示例中,您可以创建如下页面:
http://website.com/api/csv?select=col1,col2,col3&orderBy=someColumn&where=someCondition
然后您的 php 将采用这些参数并根据这些参数生成 sql 并运行查询。确保安全地处理输入以避免 SQL 注入(inject)(参见 http://bobby-tables.com/php.html)。
您当前情况的问题在于,查看您的源代码的人会清楚地看到您将 SQL 直接传递到您的服务器,这意味着他们可以生成自己的 SQL,例如:DROP TABLE table1, table2;
或更糟。
关于javascript - 安全地将敏感数据从 PHP 传递到 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32661537/