0

ユーザーから提供されたリンクの有効性をチェックし、データベースに安全に (少なくともより安全に) 保存し、それが facebook へのリンクであることを確認する小さなスクリプトを作成しました。

ここで、このコードを別のリンクにロールアウトし、必要に応じてパラメーターを変更して、これらのサイトのユーザー プロファイルへのリンクが機能するようにしたいと考えています。コードをさらに 5 回コピーして貼り付けてから、Ajax を適応させたいとは思いません。これにアプローチするより良い方法がある場合は、それを使用してください。

これは私のコードです。www.vwrx_project.co.uk/test.php で動作を確認できます。うまくいけば、 facebook.com/(something here) のみを受け入れます。

link_checker.php

<?php

function check_url($dirty_url) {
//remove anything before facebook.com using strstr() 
//clean url leaving alphanumerics : / . only -  required to remove facebook link format with /#!/
$clean_url = strstr(preg_replace('#[^a-z0-9:/.?=]#i', '', $dirty_url), 'facebook.com'); 

$parsed_url = parse_url("http://www.".$clean_url); //parse url to get brakedown of components

$safe_host = $parsed_url['host']; // safe host direct from parse_url

// str_replace to switch any // to a / inside the returned path - required due to preg_replace process above
$safe_path = str_replace("//", "/", ($parsed_url['path']));

if ($parsed_url['host'] == 'www.facebook.com' && $parsed_url['path'] != '' && $parsed_url['path'] != '/') {
    echo "<a href=\"http://$safe_host$safe_path\" alt=\"facebook\" target=\"_new\">Facebook</a>";
} else if ($parsed_url['host'] == 'www.facebook.com' && $parsed_url['path'] == '') {
    echo "missing_profile1";
} else if ($parsed_url['host'] == 'www.facebook.com' && $parsed_url['path'] == '/') {
    echo "missing_profile2";
} else {            
    echo "invalid_url";
}
}
?>

Test.php

<?php
include_once ("includes/check_login_status.php");
include_once ("includes/link_checker.php");

// AJAX CALLS THIS LOGIN CODE TO EXECUTE
if(isset($_POST["L"])){
$dirty_url = $_POST["L"]; //user supplied link
//$dirty_url = "http://www.facebook.com/profile.php?id=4"; 
    // if $dirty_url is blank
if($dirty_url == ""){
    echo "no link supplied";
    exit();     
} else {
    check_url($dirty_url);
}
exit();
}
?>

<html>
<head>
<title>testing</title>
<script type="text/javascript" src="js/main.js"></script>
<script src="js/main.js"></script>
<script src="js/ajax.js"></script>
<script>

function emptyElement(x){
_(x).innerHTML = "";
}

function cleanURL(){
var user_url = _("user_link").value;
var func = _("hidden").value;
if(user_url == ""){
        _("status").innerHTML = "Please provide a link before clicking submit";
    } else {
        _("submitbtn").style.display = "none";
        _("status").innerHTML = 'please wait ...';
        var ajax = ajaxObj("POST", "test.php");
        ajax.onreadystatechange = function() {
            if(ajaxReturn(ajax) == true) {
                if(ajax.responseText == "no link supplied"){
                    _("status").innerHTML = "Submitted blank form data.";
                    _("submitbtn").style.display = "block";
                } else if(ajax.responseText == "invalid_url"){
                    _("status").innerHTML = "The url supplied is invalid";
                    _("submitbtn").style.display = "block";
                } else if(ajax.responseText == "missing_profile1"){
                    _("status").innerHTML = "Please supply a link to your profile";
                    _("submitbtn").style.display = "block";
                } else if(ajax.responseText == "missing_profile2"){
                _("status").innerHTML = "Please supply a link to your profile";
                _("submitbtn").style.display = "block";
            } else{
                _("status").innerHTML = ajax.responseText;
            }
        }
    }
    ajax.send("L="+user_url);
}
}
</script>
</head>
<body>
    <p id="status"></p>

 <form id="linkform" onSubmit="return false;">
    <input type="text" id="user_link">
    <input type="hidden" id="hidden" value="Facebook">
    <button id="submitbtn" onClick="cleanURL()">Submit</button>
</form>

4

1 に答える 1

1

許可したい Web サイトのパラメーターを追加しないのはなぜですか?

function check_url($dirty_url, $websiteURL)

$websiteURL次に、ハードコードされた「facebook.com」の代わりに変数を使用するように関数を更新します

次に、いくつかの異なるURLが必要な場合は、これを行うことができます

check_url($dirty_url, 'facebook.com');

また

check_url($dirty_url, 'twitter.com');

それとも、単一の機能で複数のサイトをチェックできるようにしたいですか? facebook.com や twitter.com など

于 2014-07-15T16:15:57.820 に答える