html өргөтгөлтэй хуудсуудад PHP ашиглах. Маягтдаа маягт html хуудас php-г хэрхэн унших вэ
Би нэвтрэх маягт үүсгэхийг оролдож байна. Энэ бол миний HTML маягтын код юм
Би хувьдаа үүнийг PDO-д зориулж авсан.
4 ба 5-р цэгүүд
$нууц үг = mysql_real_escape_string(sripslashes(md5($_POST["нууц үг"])));
Нэгдүгээрт, үүний дараалал буруу байна. Та $_POST["нууц үг"] хэш болон тэгээдналуу зураас ашиглахыг оролдох - дараатүүний хэшүүдэд ямар ч ташуу зураас байхгүй болно. Гэсэн хэдий ч, хэрэв та хүмүүсийг нууц үгэнд ташуу зураас (эсвэл өөр ямар нэгэн зүйл) ашиглахаас сэргийлэхийг оролдож байгаа бол мөрийг хэшлэхээс өмнө тэдгээрийг арилгах хэрэгтэй.
Дараах md5-ыг нууц үг хэшлэх алгоритм болгон ашиглах ёсгүй бөгөөд энэ нь сул бөгөөд шаардлагатай хэмжээнээс илүү олон удаа мөрний мөргөлдөөнийг үүсгэхэд бүдүүлэг хүчин зүйл болдог.
Тиймээ чи ёстойНууц үгийн хэш эсвэл "хурууны хээ"-г нууц үгээ биш харин хадгалаарай, гэхдээ та эдгээр нууц үгийг зүгээр л md5() функц руу шидэхийн оронд давсалж, хэш болгохыг (хамгийн багадаа sha1-тэй) хүсэж байна.
Мөн өөрийн сонгосон хайлтын системийг ашиглан "нууц үгийн хэш тохиргоо" гэж хай.
6-р цэг
SELECT ID FROM $table WHERE username = "" . $хэрэглэгчийн нэр. "" ба нууц үг = "" . $нууц үг. "";
Анхны асуултанд дутуу байсан = гэж би нэмсэн, гэхдээ л болоо таны хүсэлтэд байгаа хэрэглэгчийн нэр, нууц үг таарахгүй байна...Хэрэв хэн нэгэн таны хэрэглэгчийн нэрэнд SQL тарилга хийж чадсан бол нууц үгийг хэзээ ч баталгаажуулахгүй. Танилцуулах:
user.id-г ХААНА хэрэглэгчээс СОНГОХ user.username = "fred" OR 1 = 1 -- AND user.password = "abc123"
Мэдээллийн сангийн түвшний нууц үгийн баталгаажуулалтад итгэхийн оронд мэдээллийн сангаас хурууны хээний хэрэглэгчийн ID болон нууц үгээ сонгоод дараа нь программ дахь нууц үгээ үнэлэх нь дээр. Энэ нь та нууц үгээ баталгаажуулахын тулд програм доторх тусгай хэш болон давслах алгоритмыг ашиглаж болно гэсэн үг юм.
7-р цэг
$_SESSION["хэрэглэгч"] = $_POST["хэрэглэгчийн нэр"];
Энэ нь зөвхөн хэрэглэгчийн нэрийг сессэд хадгалах уу? Үүнийг ямар ч байдлаар "нэвтрэх баталгаажуулагч" болгон ашиглаж болохгүй, ялангуяа таны сесс дээр хулгайлахаас урьдчилан сэргийлэх ямар нэгэн зүйл байхгүй (илт) байвал.
Сеансын ID-г күүкигээс бодит цаг хугацаанд хялбархан үнэрлэх боломжтой бөгөөд өөр хэн нэгний хэрэглэгчийн нэрийг "зээлэхэд" шаардлагатай бүх зүйл юм. Та ядаж хэрэглэгчийн IP хаяг, UserAgent стринг эсвэл хуудас бүртэй харьцуулж болох харьцангуй статик өгөгдлийн бусад хослолыг холбох замаар сесс хулгайлах магадлалыг багасгахыг хичээх хэрэгтэй... , Би аль хэдийн олж мэдсэн шиг, хэрэв танд AOL ашиглаж байгаа зочин байгаа бол), гэхдээ та хурууны хээг ашиглан 99% үр дүнтэй сесс хийх боломжтой болгож, хэрэглэгчийн сессийг андуурч дахин тохируулах магадлал маш бага бөгөөд хулгайн гэмтлийг багасгах боломжтой.
Хамгийн тохиромжтой нь та багасгах сессийн токен үүсгэж болно CSRF халдлагахэрэглэгч мэдээллийн сан дээр "давуу эрхтэй" үйлдэл хийх шаардлагатай үед (өгөгдлөө шинэчлэх эсвэл өөр зүйл хийх). Токен нь мэдээллийн санд хадгалагдсан бүрэн санамсаргүй, өвөрмөц код байж болно жигнэмэгХэрэглэгч нэвтрэх үед SSL (хэрэв хэрэглэгч HTTPS-ээс гадуур мэдээллийн баазыг шинэчлэх ямар нэгэн үйлдэл хийх боломжгүй, учир нь энэ нь өгөгдлийг интернетээр тодорхой текст хэлбэрээр дамжуулах болно. муу санаа).
Токеныг аливаа/бүх маягтын далд хэлбэрийн талбарт байрлуулсан бөгөөд маягтыг илгээх үед күүки (эсвэл сесс эсвэл мэдээллийн сан)-д хадгалагдсан утгатай харьцуулан шалгана. Энэ нь маягтыг илгээж буй хүн хамгийн багадаа таны вэбсайт дээр шууд сесс хийх болно гэдгийг баталгаажуулдаг.
Хэд хэдэн асуудал байж болно.
Нэгдүгээрт,Таны $match мэдэгдэлд нууц үгийн тэгш байдлын оператор байхгүй байна:
$match = "SELECT id FROM $table WHERE хэрэглэгчийн нэр = "".$хэрэглэгчийн нэр."" болон нууц үг"".$нууц үг."";";
Байх ёстой:
$match = "СОНГОХ id FROM $table WHERE хэрэглэгчийн нэр = "".$хэрэглэгчийн нэр."" болон нууц үг = "".$нууц үг."";";
Хоёрдугаарт, та нууц үгээ мэдээллийн санд оруулна дараа md5 ашиглан ашиглах уу?
Хэрэв тийм биш бол таны хүсэлт md5 (нууц үг)-ийг нууц үгтэй тохируулахыг оролдож байна.
Хувийн вэбсайт үүсгэх үед хүн бүр бүх зүйлийг хангаж чадахгүй боломжит арга замуудтүүний цаашдын хэрэглээ. Сайтыг цаашид хөгжүүлэх үндэслэлийг бэлтгэх нь маш чухал юм. Хэрэв та өмнө нь вэбсайт үүсгэж, бүх хуудсанд .html өргөтгөлийг өгөгдмөл байдлаар өгсөн бол зөвхөн дараа нь PHP ашиглахаар шийдсэн бол цааш уншина уу.
Өмнө нь SSI-г ашиглахын тулд сайтын хуудасны нэр .shtml өргөтгөлөөр төгсдөг байсан бол өнөөдөр ихэнх интернет серверүүд SSI-г .html өргөтгөлтэй хуудсанд ашиглахаар тохируулагдсан байдаг нь нэлээд тохиромжтой. PHP бол огт өөр түүх юм - .php өргөтгөл нь анхдагч өргөтгөл юм. Вэбсайт хөгжүүлэгчид юу ашиглахаа урьдчилан мэддэг өгөгдсөн хэлпрограмчлалын, rhinestone зөв өргөтгөл оноосон байна.
Гэхдээ бүх хуудас .html өргөтгөлөөр төгссөн бол яах вэ?
HTML өргөтгөлийг PHP-ээр солино уу
Үүнийг хэд хэдэн аргаар хийж болно. Хамгийн ойлгомжтой арга бол бүх хуудсанд .php өргөтгөл өгөх эсвэл одоо байгаа өргөтгөлүүдийг (.html, .shtml гэх мэт) өөрчлөх явдал юм. Энэ арга нь сул талуудтай. Жишээлбэл, .html өргөтгөлтэй аль хэдийн индексжүүлсэн хуудсуудыг дахин индексжүүлэх шаардлагатай болно Хайлтын системүүд. Эсвэл бүр ч муу - бүх зүйл гадаад холбоосууд, тодорхой хуудас руу шууд холбосон нь хүчингүй болно. Мөн та эдгээр өөрчлөлтийн талаар сайт бүрийн эзэмшигчдэд мэдэгдэж, хуудас бүрт 301 алдаатай өөр хуудас үүсгэх шаардлагатай болно. Мэдээжийн хэрэг, нэг өргөтгөлийг нөгөө өргөтгөлөөр солих нь зөвшөөрөгдөх зүйл боловч тухайн сайт аль хэдийн олон хуудастай, бусад сайтуудын өөр хуудас руу олон холбоостой бол яах вэ?
Ухамсартай шалтгаанаар Энэ мөчЭнэ сайтын бүх хуудсууд html өргөтгөлөөр төгсдөг бөгөөд би дээрх өөрчлөлтийг хийхийг хүсээгүй бөгөөд ингэснээр өөртөө шаардлагагүй хүндрэл учруулна.
Та үүнийг өөр аргаар хийж болно. Хэрэв сайтыг байршуулсан сервер mod_rewrite-г дэмждэг бол (ихэнх тохиолдолд үүнийг дэмждэг) .htaccess файлд хандах боломжтой бол та яг энэ файлд дараах мөрүүдийг нэмж болно.
RewriteRule ^(.*)\.html $1\.php дээрх RewriteEngine
Энэ кодыг .htaccess-д нэмснээр та санаа зовох хэрэггүй болно. Хүссэн .html өргөтгөлтэй байхгүй бүх хуудсыг Apache-ийн гайхамшгийн ачаар автоматаар .php өргөтгөлөөр солих болно. Гэхдээ энэ арга нь цорын ганц биш юм. Та ижил .htaccess файлд дараах зүйлийг бичиж болно:
AddHandler програм/x-httpd-php .php .html .htm
Миний бодлоор хамгийн амжилттай арга. Энэ нь HTML хуудсуудыг PHP хуудастай тэнцүү болгож, PHP-ийн бүх функцийг HTML өргөтгөлтэй хуудсанд ашиглах боломжтой гэсэн үг юм. Хэрэв танд .htaccess файлд хандах эрх байхгүй бол та хостинг компани руу захидал бичиж, админаас бүртгүүлэхийг эелдэгээр асууж болно. Apache тохиргоо(httpd.conf) сайтад шаардлагатай утга.
Дашрамд хэлэхэд, хэрэв өмнө нь сайт SSI-г дараах байдлаар ашигласан бол:
Дараа нь шинэ PHP төлөвт энэ кодыг дараах байдлаар солих шаардлагатай.
include("file.txt"); ?>
За, энэ бол дээр дурдсан аргуудын аль нэг нь тусална гэж бодож байна.
РНР бол сервер талын суулгагдсан програмчлалын хэл юм. Түүний синтаксийн ихэнх хэсгийг C, Java, Perl хэлнээс авсан. Мөн зөвхөн хэд хэдэн өвөрмөц шинж чанарыг нэмсэн PHP функцууд. Энэ хэлний гол зорилго нь динамикаар үүсгэгдсэн PHP HTML хуудас үүсгэх явдал юм.
PHP-ээс HTML рүү
Нарийн төвөгтэй вэб хуудсуудыг үүсгэх үед та тодорхой даалгавруудыг биелүүлэхийн тулд PHP болон HTML хэлийг хослуулах хэрэгцээтэй тулгарах болно. Өнгөц харахад энэ нь төвөгтэй мэт санагдаж магадгүй, учир нь PHP болон HTML нь бие даасан хоёр салбар юм, гэхдээ энэ нь тийм биш юм. PHP нь HTML-тэй харилцахад зориулагдсан бөгөөд түүний кодыг хуудасны тэмдэглэгээнд оруулах боломжтой.
PHP кодыг тусгай таг ашиглан HTML хуудсанд оруулсан болно. Хэрэглэгч хуудсыг нээх үед сервер нь PHP кодыг боловсруулж, дараа нь боловсруулалтын үр дүнг илгээдэг (хэрэглэгч биш PHP код) хөтөч рүү.
HTML болон PHP хоёрыг нэгтгэхэд маш хялбар байдаг. Тагуудаас гадна PHP скриптийн аль ч хэсэгPHP хөрвүүлэгч үл тоомсорлож, хөтөч рүү шууд дамжуулдаг. Хэрэв та доорх жишээг харвал бүрэн PHP скрипт дараах байдалтай байж болохыг харж болно.
Өнөөдөр сайн уу.