URL变量是否安全


Are URL variables safe

传递URL变量是否安全?是的,我知道它们在一个普通的地方,任何人都可以抬头看到。。。。它不是SSN或任何东西。我说的不是HTTPS项目,只是传递一个标题和一个电子邮件地址。。。。

例如,假设在一个网站的"关于我们"页面中,有一个员工列表。让我们以"吉米"为例。吉米有一个个人简介和照片,他的个人简介旁边有一个[CONTACT Jimmy]按钮。如果有人点击[CONTACT Jimmy],它会执行以下操作:

<a href="contact.php?title=Jimmy&emailto=jimmy@mysite.com"> 

在contact.php中,我检查变量是否被传递,如果没有,则设置默认值:

<?php
// Checks to see if $emailto is empty, if so, it will send to this default email address
if (empty($_GET['emailto'])) {
    $_GET['emailto'] = 'info@mysite.com';
}
?>
<?php
// Checks to see if $title is empty, if so, will default the the selected title "US"
if (empty($_GET['title'])) {
    $_GET['title'] = 'Us';
}
?>

提交后,contact.php表单会在提交前剥离代码、检查有效性等。在这个黑客和垃圾邮件机器人盛行的时代,我仍然觉得在URL中有它们是赤裸裸的。如果这是一种可怕的、无法形容的传递变量的方式,你有没有想过如何完成同样的事情?我宁愿在联系表格上没有下拉列表,让人们选择联系谁,但我想这是一种选择。好吧……善良一点!;)

使用Javascript而不是get通过post提交。发送此类数据的方式比获取要好得多。

function contact(title, to)
{
    var formdata = new FormData();
    formdata.append('emailto', to + '@mysite.com');
    formdata.append('title', title);
    var ajax = new XMLHttpRequest();
    ajax.open('post', 'contact.php', false);
    ajax.send(formdata);
}

实现这一目标的另一种方法是使用HTML5中的data-属性,然后使用jQuery将其与jQuery.post耦合。

<a href="#" class="contact-user" data-user-email="jim@jimmy.com">Contact Jimmy!</a>

然后加入一些jQuery:

$('.contact-user').on('click', function(e){
    var userEmail = $(this).data('user-email');
    $.post('handle_contact.php', {
        userEmail: userEmail
    }, function(data) {
        // Do something with data
    }, 'json'); // JSON return for example
});

不过,为了回答你的问题,你所做的并不被认为是危险的,但如果你没有正确处理变量,可能会导致问题。攻击者可以很容易地传入危险的代码,如果你不正确地对其进行消毒,你可能会非常脆弱。然而,这并不是你的情况独有的。