MySQL / PHP bağlantı hatası, olası kullanıcı imalat

9 Cevap php

Ben bir öğrenme yönetim sistemi bakımından sorumlu değilim ve bu benim son birkaç ay içinde açık ve kapalı ile ilgili oldum bir konudur.

(Binlerce arasında) tek bir öğrenci onun kompozisyon gönderimler web sitesi tarafından "yenen" edildiğini iddia etmektedir. Form gönderme sonra onun kompozisyon aşağıdaki metin ile değiştirilmiştir diyor ki:

Warning: mysql_connect() [function.mysql-connect]: Lost connection to MySQL server at 'reading initial communication packet', system error: 111 in /home/web/solomon_1.3/classes/db.class.php on line 84

Fatal error: Error connecting to database server: in /home/web/solomon_1.3/classes/db.class.php on line 85

Yukarıdaki uyarı ve ölümcül hata yaptığı gönderme gibi veritabanında saklanır. Hata açıkça bir bağlantı yapılmış olamazdı belirtiyor Ama bu nasıl olabilir? Deneme gönderme sayfası alır gibi yaklaşık olarak temel: Tek bir DB bağlantısı yapıldığında, form veri DB kaydedilir, kullanıcı geri gönderme sayfasına yönlendirilir.

Hatları db.class.php of 84-86 gibidir:

if (!($sql_id=mysql_connect($server, $user, $pwd,$new))){
    trigger_error("[Error connecting to database server]: {$sql_id}", E_USER_ERROR);
}

PHP kaynak dosyasında gösterildiği gibi öğrenci tarafından bildirilen hata Ölümcül Hata açıklama dizesi köşeli parantezler yoksun nasıl fark. Bu köşeli parantez o sadece iş önlemek için bir yol olarak teslim kutuya bir hata dizesi yapıştırarak olduğu şüphesiyle öğrencinin ilk hata raporu sonrası yaklaşık iki ay önce eklendi. Ben "ödevimi köpek yedi" 21. yüzyıl versiyonu sanırım.

Geçenlerde bir hafta önce öğrenci halen orijinal raporlar hata without brackets. Gibi Bir sunucu çapında grep öğrenci tutar hata sadece yok bir dize dayanır "alma" doğrulandı.

Şimdi, en reasonable açıklama öğrencinin bizimle vidalama olmasıdır. Bu DB bağlantı hatası geçmişte oldu ama en azından son üç ay içinde oldu.

Bu yüzden benim delil sağlam olduğundan kesinlikle emin olmak istedim öğrenci bu aşkın kovulabilirdim olabilecek bir şans var. Büyük olasılıkla ya da başka herhangi bir alternatif teorileri düşünebiliyor musunuz?

9 Cevap

tpdi doğru bir şekilde belirttiği gibi: an innocent person wouldn't be trying to prove that innocence.

Ve evet, hatta sistem yöneticisine ciddi hatalar bir kopyasını e-posta, bir dosyaya log hataları gerekir. Ama şimdi hepsi size yardım edilmez.

First thoughts:
Although there is no direct evidence that the student is making up a digital dog to eat his homework, I've never seen an error message being inserted into any table instead of the expected contents.

Senaryoda bir gerçek hata, yeni bir rekor sonuna kadar hata mesajı neden olursa, ekrandaki hata büyük olasılıkla tamamen farklı olurdu. Öğrencinin annesi bu hatayı gördüğünü iddia Yani, ben bile zor inanmak bulabilirsiniz.

The missing angled brackets in the error message:
I've seen many unexpected crashes, even in code that 'could not possibly be wrong' (tm). The fact that the brackets are missing is, as others have pointed out, no evidence in itself.
The error could be copied & pasted from on old e-mail or even be changed by a custom error handler (which you do not seem to have, but just to point out the possibility).

Senaryoda bir gerçek hata hata mesajı yeni eklenen veritabanı kaydında biter neden Ama, eğer, bu hata iletisi komut oluşturulur. Eksik açılı parantez Ancak, güçlü hata iletisi komut dışından geldiğini ileri sürer.

Then the script lines themselves:

84: if (!($sql_id=mysql_connect($server, $user, $pwd,$new))){
85:     trigger_error("[Error connecting to database server]: {$sql_id}", E_USER_ERROR);
86: }

As far as I can see, if the script fails to set up a valid connection (line 84) it triggers the user error on line 85.
In reverse, if the user error (line 85) is triggered, the script failed to obtain a valid MySQL link identifier.

Bildiğim kadarıyla geçerli bir MySQL link tanımlayıcı olmadan sunucu üzerinde herhangi bir veri etkileyecek bir PHP-script için hiçbir yolu yoktur.

Eksik MySQL link tanımlayıcı ek olarak, veri temas olursa olsun, yukarıdaki hatlarında herhangi bir kod yoktur. Yani geçerli bir bağlantı var olsa bile, bu çizgiler yeni kayıt ekleme tetiklemek değildir.

Ben veritabanı sunucusuna bağlantı açma sürecinde bir hata hiç bir kayıt eklenecek neden, yalnız mükemmel okunabilir PHP-tarz hata mesajı tutan bir rekor olacağını, son derece muhtemel bulmak imkansız sınırındaki.

My conclusion bases upon the information you posted:
The student has a copy of an error message that was shown in the browser after a real error that has occurred somewhere in the past. He now posts a copy of the error message to the script. The script stores the posted information in the database.

Don't you log when errors like this occur?
It does look like he's making it up though...

Jeff Exception-Driven Development dediği gibi

If you're waiting around for users to tell you about problems with your website or application, you're only seeing a tiny fraction of all the problems that are actually occurring. The proverbial tip of the iceberg.

Öğrenci parantez nedense soyulmuş, ya da yenisini görünce onlar sadece önceki bir hata c + p gönderme olabilir bir kurulum olabilir. Ya bunu yazarak olabilir. Hiç) bir kullanıcı bildirilen hata mesajı 8 güvenme.

Ben söyleyebilirim ilk şey kullanıcıya hata mesajları göndermek gerektiğini varsayalım. Onlar oturum açmış olmanız gerekir. display_errors php.ini olarak kapatın ve açın log_errors. Bu bir güvenlik sorunu (ben şimdi sunucu dosya yapısı hakkında bilmek ve MySQL koşuyorsunuz) hem de ve hatalar oluyor zaman iz sağlayacak.

Ayrıca evet, web sunucusu erişim günlüklerini olmalıdır? Eğer öğrenci geliyor IP biliyorsanız, size girişler için zamanlama ve zaman hataları aramak için bildirmeniz gerekir.

Ayrıca, hangi kullanıcı oturum açmış-in ile ilgili, özellikle de uygulama giriş yapmak sahip düşünebilirsiniz. Lütfen önce trigger_error bir dosyaya geçerli kullanıcı ve çevre eklerseniz bu kullanıcının aslında bu sorunları görmek ise, hemen anlarsınız.

In dubio pro reo. Öğrenci (web sitesini kullanarak olmadan) zamanında kendi malzeme sağlayabilir, ben suçlamaları etrafında atma önleyeceğini.

Tabii ki, sonrası parametrelerin büyüklüğü gibi şeyler ile web sunucusu iyi bir günlük olan, SQL parametreleri ve yazının anda öğrencinin ekranının ekran boyutu şeyleri değiştirmek olabilir.

Kodunda biri farklı bir mesaj olması ... oldukça güçlü kanıtlar bulunuyor.

İlle. Ben hatası ilk defa görseydim, çok benzer bir hatasıyla ikinci kez aldım, sonra bu konuda prof gönderilecektir, ben muhtemelen sadece ilk hatayı ilk e-posta kopyalama ve onunla ediyorum.

O, and because as an innocent person, I wouldn't be trying to prove that innocence. tarayıcıda ve kopyalama seçerek biraz daha kolay olurdu çünkü ben bu yapardım

MySQL boğulmaya neden onun girişindeki bir şey varsa beni biraz sürpriz olacaktır. Kendi iş olarak, ben (ve MySQL sürüm notları onlarla dolu) MySQL sunucu çökmesine sebep olabilir belirli sorguları bulduk. Sunucuda depolanan hata mesajı için hesap verebilecek, üzerinde başarısız / yukarı doğru MySQl geneli göz önüne alındığında, kolayca sunucu çöker, sonra (çok hızlı) alır bir durum alabilirsiniz geri getirdi.

Adamı suçlamak yerine, onun atama e-posta edelim. Bu atama nedeniyle, and prof online eğitim sistemi yoluyla atama göndererek test etmek için izin ne zaman açık olduğunu prof sağlayacaktır.

Eğer önünüzde bir gönderme yapmak için onu soruyorum düşündünüz mü? (Daha iyi olmasına rağmen) sunulması, gerçek deneme olmak zorunda değil ama belki o senin komut bekliyor olmayan bir şey yapıyor. Kullanıcılar, her zaman "sadece bu kodda bir hata olamaz" zaman hataları bulmak mümkün.

EDIT: Eğer ona bir CD-R/RW veren ve diske onun dosyalarını yakmak için onu isteyen ve onun için göndermek olacak düşündünüz mü?

Bana çok okunaklı görünüyor.

Başka nasıl olabilir öğrencisi:

  1. (bu bir kütüphane değil, doğrudan HTTP servis dosyası gibi görünüyor) bir görünüşe iç. php dosyasının adını biliyor
  2. mysql_connect işleme kod satır numaralarını biliyorum

Eğer iddia edilen hata değişikliklerin satır numarası, öğrencinin aynı hata iletisini veya yeni satır numaraları ile yeni bir hata mesajı alıyorum, böylece, o PHP dosyanın üstüne bir kaç satırlarını eklemek için olsaydı?

Eski, ben o hızlı bir çekmeye çalışıyor olabilirsiniz söyleyebilirim. Ikincisi eğer ucunda yanlış bir şey var gibi, bu sesler.

Bakım o anda oluyor olabilir misiniz? Herkes uyuyor, oysa belki o geç sabah raporlarını göndererek oluyor.