2017-01-19 18 views
0

iは現在http://red-sec.net
のためのニュースシステムを作っていGETパラメータを使用してコンテンツ管理システムを作成します。iが3ページ持って

  • のindex.phpを|最新のニュースを見て、どれを読むかを選択してください。
  • article.php |実際のニュース投稿を見る
  • post.php |

    $query = "SELECT * FROM news ORDER BY date DESC LIMIT 20"; 
    $run = mysqli_query($connect,$query); 
    while($row = mysqli_fetch_array($run)) { 
        $article_id = $row['article_id']; 
        $user_id = $row['user_id']; 
        $title = $row['title']; 
        $content = $row['content']; 
        $date = $row['date']; 
        $query = "SELECT username FROM users WHERE ID = '$user_id'"; 
        $test = mysqli_query($connect,$query); 
        $row2 = mysqli_fetch_array($test); 
        $user_name = $row2['username']; 
        echo '<div class="row"> 
         <div class="col-lg-12"><h3 class="para"><a class="para" href="article.php?id='.$article_id.'">'.$title.'</a></h3> 
         <p class="para">Written by: '.$user_name.'</p> 
         </div> 
         </div>'; 
    } 
    

    をあなたは私がニュース記事からエコー午前見ることができるように:私は次のことをやっているのindex.phpになりまし

新しいニュース記事を作成します(管理者アクセスが必要)。
uは here
を見られるように、それはそれはそれは脆弱SQLIなりますので、私はGETパラメータを使用せずに article.phpに情報を取得する方法を見つけようとしています article.php?id=post_idが表示されますそれらのいずれかをクリックしてください。私はarticle.phpでそれを保護することができますが、私はGETリクエストを全く使わない方が好きです。私はそれを行うには探しています
の方法のいずれかである:

  • は$ _SESSIONを通じてarticle.php` `に情報を送信するが、私は$ _SESSION`にポストのIDを設定する方法がわかりません`リンクのクリックで
  • あなたがhttps://facebook.com/youtubeに行くと、私は何を意味するのかを見ることができます、彼らは各ユーザーのためのディレクトリを作成する方法を知っていますディレクトリが、私はどのようにニュース記事の内容で新しい.phpファイルを作るのか分かりません。

は再び、任意のヘルプはあなたが$ _SESSIONを使用することができます

+0

、その標準それは脆弱SQLIになるだろう – nogad

+0

、私はそれを避けることができます知っているが、私はFacebookが同じように、あなただけのURLのパス名を使用している場合、それは –

+0

それはまだ脆弱になりませ方法を学ぶために探していますフェイスブック。変数は依然としてチェックする必要があります。 facebookはユーザーごとのディレクトリを持っていませんURLでパスを使用するのと同じ方法id = 99 – nogad

答えて

0

あなたの前提は完全ではありません。 GETを使用することが標準です。さもなければ、あなたは「ディープリンク」することができなくなります。コンテンツを表示するには、友人にそのサイトにアクセスし、ページ14をクリックして3番目のストーリーを選択するように指示する必要があります。

あなたが実際にやりたいことは、ユーザーが送信したデータがきれいであること、または直接使用しないことです。

$result = mysqli_query("SELECT * FROM news WHERE id = ".GET_['id']); 

これは、直接SQLインジェクションを可能にし、本当にHORRIBLEを次のようになります(最低)擬似コードの例として、次のコードを取ります。あなたは、intとセミコロンを含むGETパラメータを使用することで、そのコードで何でもできます。その後、あなた自身のクエリを実行します。管理者パスワードを変更する例です。

より良いアプローチは、ユーザーデータを確認し、prepared statementを使用することです。

$newsIDs = mysqli_query("SELECT id FROM news"); 
$getID = $_GET['id']; 
if(in_array($getID,$newsID)){ 
    $statement = $mysqli->prepare("SELECT * FROM news WHERE id = ?"); 
    $statement->bind("i", $getID); 
    $result = $statement->execute(); 
} 

facebookとの比較では、パラメータを変数にバインドするための書き換えルールを使用している可能性があります。実際に何が起きているのか(末尾に)index.php?page=youtube&user=someoneが呼び出されています(実際にPHPを使用している場合は、どのような種類のパラメータを持つファイルでも可能です)。書き換えの仕組みは、Webサーバーによって異なります。私はちょうど得る使用する

+0

私はそれをしました;)http://news.red-sec.net/article/26/This-is-a-title –

+0

私は別の部分にもかかわらず問題があります。私がhttp://red-sec.net/user/badboy17に行くとき、CSSはちょっと見逃されるようですが、私がhttp://red-sec.net/user.php?u=badboy17に行く理由は何ですか? ? –

+0

どちらも私に404を取得します。URLの書き換えにより、ブラウザには書き換えられたURLが表示されます。したがって、相対リンクがこの「仮想」ディレクトリを基準にしているようにする必要があります。だから、 'href =" css/style1.css "でスタイルスタイルを作っているなら、'/user/css'ディレクトリで 'style1.css'を見つけようとします。スラッシュを先頭に追加することで、絶対的なリンクになります。あなたはそれをどのように解決したいのか考える必要があります。両方のアプローチに欠点と賛否両論があります。 – Seth

関連する問題