$_GETもしくは$_POSTの変数をそのままsqlに組み込んではいけない、
ってのは良く言われてる事ですが、具体的にはどんな対策をすればよいのでしょうか?

プログラムのバグの可能性ももちろんありますが、悪意のあるイタズラが一番怖いので、まずは$_GETと$_POSTの値をチェック。
これに「;」みたいにヤバそうな文字が含まれてたらエラーフラグを立てて問答無用にたたき落とす、って感じでよいのでしょうか?

また入力画面から渡された値はhtmlspecialcharsとstripslashesで処理したあとでDBに格納することになると思いますが、htmlspecialcharsとstripslashesをどのタイミングで使うのかとか、頭が混乱してきました。

登録時:入力画面→確認画面→(修正画面)→DBに格納
修正時:修正画面→確認画面→(修正画面)→DBに格納

という感じの流れではどのタイミングで使うのがよいのでしょうか?

※register_globals = off、magic_quotes_gpcもオフという前提です。