Sachverhalt:
A. Das Steueramt des Kantons Solothurn nahm am 9. September 2004 gegenüber A._ und B._ Nach- und Strafsteuerveranlagungen für die Jahre 1997, 1998 und 1999 (Staatssteuer) und 1999/2000 (direkte Bundessteuer) vor. Die Einsprache sowie der Rekurs und die Beschwerde, welche die Steuerpflichtigen dagegen beim Steueramt und anschliessend - am 10. Juni 2006 - beim Steuergericht des Kantons Solothurn erhoben, blieben ohne Erfolg.
Die umstrittenen Veranlagungen stehen im Zusammenhang mit einem Strafverfahren gegen C._, der von A._ zur Anlage übergebene Gelder veruntreut hatte. Rechtsanwalt D._ verteidigte im Jahre 2005 C._ im Strafverfahren. Er wirkte ausserdem als Präsident des Steuergerichts, als dieses mit Urteil vom 17. September 2007 über die Rechtsmittel der Eheleute A._ und B._ entschied.
B. A._ und B._ beantragen dem Bundesgericht mit Beschwerde vom 18. Februar 2008, das Urteil des Steuergerichts vom 17. September 2007 aufzuheben und die Sache zur Neubeurteilung an dieses Gericht zurückzuweisen, da D._ wegen seiner Mitwirkung im Strafverfahren hätte in den Ausstand treten müssen.
C. Das Steueramt und die Eidgenössische Steuerverwaltung verzichten auf eine Stellungnahme zur Ausstandsfrage und äussern sich lediglich zu den umstrittenen Veranlagungen. Das Steuergericht beantragt die Abweisung der Beschwerde, soweit darauf einzutreten sei.
Erwägungen:
1. Die Beschwerdeführer begründen ihr Rechtsmittel nicht näher. Sie erklären einzig, D._ hätte "gemäss der geltenden Strafprozessordnung" wegen Befangenheit in den Ausstand treten müssen, da er bereits als Strafverteidiger von C._ tätig war. Aus der Rechtsschrift geht jedoch nicht hervor, welche Bestimmungen der Strafprozessordnung den Ausstand geboten hätten. Tatsächlich finden sich die Ausstandsbestimmungen für steuergerichtliche Verfahren nicht in der Strafprozessordnung, sondern in §§ 92 ff. des Solothurner Gesetzes über die Gerichtsorganisation vom 13. März 1977 (GOG/SO). Mangels einer genügenden Rüge ist nicht zu untersuchen, ob der unterbliebene Ausstand von D._ diese Vorschriften verletzte, was ohnehin nur unter dem Gesichtspunkt der Willkür geprüft werden könnte (vgl. Art. 42 Abs. 2, Art. 95 und Art. 106 Abs. 2 BGG; vgl. auch BGE 131 I 113 E. 3.3 S. 115 f.). Hingegen machen die Beschwerdeführer sinngemäss und in genügend begründeter Weise ebenfalls einen Verstoss gegen das verfassungsmässige Recht auf ein unabhängiges und unparteiisches Gericht gemäss Art. 30 Abs. 1 BV geltend.
2. Die Beschwerdeführer haben im vorinstanzlichen Verfahren kein Ausstandsbegehren gestellt, sondern erheben den Vorwurf der Befangenheit des Gerichtspräsidenten erstmals vor Bundesgericht. Nach der Rechtsprechung verstösst es gegen Treu und Glauben (Art. 5 Abs. 3 BV), Einwände dieser Art erst nach einem ungünstigen Entscheid im Rechtsmittelverfahren vorzubringen, wenn der Mangel schon vorher hätte festgestellt werden können. Insoweit wird der Anspruch auf Anrufung der Garantie von Art. 30 Abs. 1 BV verwirkt (BGE 132 II 485 E. 4.3 S. 496 f.; 128 V 82 E. 2b S. 85; 124 I 121 E. 2 S. 122 f.). Die Pflicht zur sofortigen Stellung von Ausstandsbegehren ergibt sich überdies aus dem kantonalen Recht (§ 95 Abs. 1 GOG/SO).
3. 3.1 Die Geltendmachung von Ausstandsgründen setzt die Kenntnis der personellen Zusammensetzung des Gerichts voraus. Das verfassungsmässige Recht auf einen unabhängigen und unparteiischen Richter umfasst deshalb auch den Anspruch auf Bekanntgabe, welche Richter am Entscheid mitwirken. Das bedeutet indessen nicht, dass dem Rechtsuchenden die Namen der entscheidenden Richter ausdrücklich genannt werden müssen. Es genügt vielmehr, dass er die Namen aus einer allgemein zugänglichen Quelle (Staatskalender oder Internet) entnehmen kann. Nach der Rechtsprechung müssen die Parteien damit rechnen, dass das Gericht in seiner ordentlichen Besetzung tagen wird. Ausstandsgründe sind deshalb gegenüber den ordentlichen Gerichtsmitgliedern sofort zu erheben und können nicht erst nach dem Entscheid in einem anschliessenden Rechtsmittelverfahren geltend gemacht werden. Das Bundesgericht hielt zunächst fest, dass zumindest eine Partei, die durch einen Anwalt vertreten ist, die ordentliche Besetzung des Gerichts kennen müsse (BGE 117 Ia 322 E. 1c S. 323 mit Hinweisen; vgl. auch BGE 132 II 485 E. 4.4 S. 497).
Später hat es erklärt, diese Kenntnis dürfe in Bezug auf die Mitglieder des Bundesgerichts auch von einem Laien erwartet werden; es verwies darauf, dass die ordentliche Zusammensetzung aus dem Eidgenössischen Staatskalender und neuerdings ohne weiteres auf dem Internet in Erfahrung zu bringen sei (Urteil 1P.63/1999 vom 15. Februar 1999 E. 2). An dieser Praxis ist festzuhalten, wobei sie ebenso für andere Gerichte Geltung beansprucht. Wenn ein Rechtsuchender vom Beizug eines Anwalts absieht, entbindet ihn dies nicht davon, bei der Prozessführung mit der gebotenen Sorgfalt vorzugehen. Dazu gehört auch, rechtzeitig das Vorliegen allfälliger Ausstandsgründe zu prüfen und sich zu diesem Zweck die nötige Kenntnis der ordentlichen Besetzung des Gerichts zu verschaffen.
3.2 Im Kanton Solothurn kann die Zusammensetzung der Gerichte dem jährlich aktualisiertem kantonalen Staatskalender (Solothurner Jahrbuch) oder dem Internet entnommen werden. Die Beschwerdeführer hätten deshalb wissen müssen, dass D._ in den Jahren 2006 und 2007 als Präsident des Steuergerichts amtete, und seinen Ausstand bereits im vorinstanzlichen Verfahren verlangen können. Nach der erwähnten Rechtsprechung haben sie mit der nicht rechtzeitigen Geltendmachung den aus Art. 30 Abs. 1 BV folgenden Anspruch verwirkt. Auf die Beschwerde ist demnach nicht einzutreten.
4. Bei diesem Verfahrensausgang sind die Gerichtskosten den Beschwerdeführern aufzuerlegen (Art. 65 und 66 Abs. 1 und 5 BGG). Parteientschädigungen werden nicht geschuldet (vgl. Art. 68 BGG).
Demnach erkennt das Bundesgericht:
1. Auf die Beschwerde wird nicht eingetreten.
2. Die Gerichtskosten von Fr. 500.-- werden den Beschwerdeführern zu gleichen Teilen und unter solidarischer Haftung auferlegt.
3. Dieses Urteil wird den Parteien, dem Steuergericht des Kantons Solothurn und der Eidgenössischen Steuerverwaltung schriftlich mitgeteilt.
Lausanne, 28. Juli 2008
Im Namen der II. öffentlich-rechtlichen Abteilung
des Schweizerischen Bundesgerichts
Der Präsident: Der Gerichtsschreiber:
Merkli Merz